验证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