Geo*_*gie 19 python django validation
在模型的Meta类中,我定义了unique_together.我有一个基于这个模型的ModelForm.当我在这个ModelForm上调用is_valid时,如果unique_together验证失败,将自动引发错误.这一切都很好.
现在我的问题是我对默认的unique_together错误消息不满意.我想覆盖它.我怎样才能做到这一点?对于与字段相关的错误,我可以通过在字段参数上设置error_messages来轻松实现.但unique_together是非字段错误.如何覆盖非字段错误消息?
jif*_*yin 37
你可以在Django 1.7中做到这一点
from django.forms import ModelForm
from django.core.exceptions import NON_FIELD_ERRORS
class ArticleForm(ModelForm):
class Meta:
error_messages = {
NON_FIELD_ERRORS: {
'unique_together': "%(model_name)s's %(field_labels)s are not unique.",
}
}
Run Code Online (Sandbox Code Playgroud)
小智 25
更新2016/10/20:对于Django> = 1.7,请参阅下面的jifeng-yin更好的答案
覆盖这些错误消息的最好方法可能是覆盖unique_error_message模型上的方法.Django在验证期间遇到唯一性问题时调用此方法来获取错误消息.
你可以只处理你想要的特定情况,并像往常一样让Django处理所有其他情况:
def unique_error_message(self, model_class, unique_check):
if model_class == type(self) and unique_check == ('field1', 'field2'):
return 'My custom error message'
else:
return super(Project, self).unique_error_message(model_class, unique_check)
Run Code Online (Sandbox Code Playgroud)
小智 5
对于 DRF 序列化程序,您可以使用它
from rest_framework import serializers
class SomeSerializer(serializers.ModelSerializer):
class Meta:
model = Some
validators = [
serializers.UniqueTogetherValidator(
queryset=model.objects.all(),
fields=('field1', 'field2'),
message="Some custom message."
)
]
Run Code Online (Sandbox Code Playgroud)
这是原始来源。
| 归档时间: |
|
| 查看次数: |
8655 次 |
| 最近记录: |