其他分享
首页 > 其他分享> > 验证Django中的值列表

验证Django中的值列表

作者:互联网

在我的模型中,我有一个只能包含值“ A”,“ B”和“ C”的字段.声明字段时,这是否是使用选择参数的最佳选择?

如果我没有决定使用choice参数,而是想为其编写自定义验证逻辑,那么我将在哪里写这—是否在模型的clean方法中?我还看到了clean_< fieldname>方法-它们仅适用于表格有哪些用途?我想在模型中进行此验证,因为我没有使用表单.

class Action(models.Model):
    """
    Contains the logic for the visit
    """
    id = models.AutoField(primary_key=True)
    path = models.CharField(max_length=65535, null=False)
    to = models.IntegerField(null=False)

    def clean(self, **kwargs):
        """
        Custom clean method to do some validation
        """
        #Ensure that the 'to' is either 1,2 or 3.
        if self.to not in [0, 1, 2]:
            raise ValidationError("Invalid to value.")

进行验证时,是否需要返回一些值?有人创建新记录时会调用我的method方法吗?

(尽管我已经阅读了文档,但对此我还是有些困惑.)

万分感谢.

解决方法:

在您给出的示例中,我将使用choice参数.如果您将验证方法放在clean方法中,则任何错误都将与操作实例而不是to字段相关联.

如您所说,clean_< fieldname>方法适用于表单字段.在模型上,您可以定义validators.

这是将您的干净方法重写为验证器的示例.

from django.core.exceptions import ValidationError

def validate_to(value):
    """
    Ensure that the 'to' is either 1, 2 or 3.
    """
    if value not in [1, 2, 3]:
        raise ValidationError("Invalid 'to' value.")

class Action(models.Model):
    """
    Contains the logic for the visit
    """
    id = models.AutoField(primary_key=True)
    path = models.CharField(max_length=65535, null=False)
    to = models.IntegerField(null=False,validators=[validate_to])

标签:python,django,django-models
来源: https://codeday.me/bug/20191208/2089897.html