如何在Django模型中逐个验证一个字段?

问题描述

在将数据保存到模型中时,我想通过另一个字段来验证一个字段(它们在同一模型中)。这是我的模型:

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时,您可以通过自定义消息通知用户。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...