如何在 Django 的模型中通过一个字段验证另一个字段?
How to validate one field by another in a model in Django?
在将数据保存到模型时,我想通过一个字段验证另一个字段(它们在同一模型中)。这是我的模型:
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()
我想通过取自 maxSize
字段的最大大小来验证 value
字段,并在验证失败时向用户显示 return 特定错误。怎么做? :)
如果您使用的是表格,请参阅 the docs。引发 ValidationError 时,您可以使用自定义消息通知用户。
在你的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
或者您可以在 clean 方法中进行验证
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
在将数据保存到模型时,我想通过一个字段验证另一个字段(它们在同一模型中)。这是我的模型:
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()
我想通过取自 maxSize
字段的最大大小来验证 value
字段,并在验证失败时向用户显示 return 特定错误。怎么做? :)
如果您使用的是表格,请参阅 the docs。引发 ValidationError 时,您可以使用自定义消息通知用户。
在你的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
或者您可以在 clean 方法中进行验证
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