问题描述
在将数据保存到模型中时,我想通过另一个字段来验证一个字段(它们在同一模型中)。这是我的模型:
User
我想通过从字段class String(models.Model):
key = models.CharField(max_length=60,unique=True)
name = models.CharField(max_length=60)
value = models.CharField(max_length=230)
maxSize = models.PositiveSmallIntegerField()
中获取的最大大小来验证value
字段,并在验证失败时将特定的错误返回给用户。该怎么做?
解决方法
在您的ModelForm
中,您可以使用clean
方法。
class StringModelForm(forms.ModelForm):
# Everything as before.
def clean(self):
cleaned_data = super().clean()
maxSize = cleaned_data.get("maxSize")
value = cleaned_data.get("value")
if maxSize = ... : #you logic here
raise ValidationError('your error message')
,
以模型形式添加您自己的验证方法
class FormString(forms.ModelField):
class Meta:
model = String
fields = "__all__"
def clean_value(self):
value = self.cleaned_data.get("value")
max_size = self.cleaned_data.get("maxSize")
if value and max_size and len(value) > max_size:
self.add_error("value","length should be less then {}".format(max_size))
return value
或者您可以使用干净方法进行验证
def clean(self):
cleaned_data = super().clean()
value = cleaned_data.get('value')
max_size = cleaned_data.get("maxSize")
if value and max_size and len(value) > max_size:
self.add_error("value","length should be less then {}".format(max_size))
return cleaned_data
,
如果您使用的是表格,请参见the docs。引发ValidationError时,您可以通过自定义消息通知用户。