如何在 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