[英]Validating a list of values in Django
在我的 model 中,我有一个字段应该只包含值“A”、“B”和“C”。 这是否最适合在声明字段时使用choice
参数?
如果我没有决定使用choice
参数并想为其编写自定义验证逻辑,我将在哪里写这个——这会是在 model 的clean
方法中吗? 我还看到clean_<fieldname>
方法——这些方法有什么用,或者它们只适用于 forms? 我想在 model 中进行此验证,因为我没有使用表单。
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.")
当我进行验证时,我需要返回一些值吗? 当有人创建新记录时会调用我的方法方法吗?
(虽然我已经阅读了文档,但我仍然对此感到有些困惑。)
万分感谢。
如果您只希望它是“A”、“B”和“C”,那么您绝对应该使用 Django 的内置验证,而不是自己滚动验证。 请参阅标题为choices
的部分中的https://docs.djangoproject.com/en/1.3/ref/models/fields/ 。
简单来说:
class Action(models.Model):
"""
Contains the logic for the visit
"""
TO_CHOICES = (
(0, 'Choice 0'),
(1, 'Choice 1'),
(2, 'Choice 2'),
)
id = models.AutoField(primary_key=True)
path = models.CharField(max_length=65535, null=False)
to = models.IntegerField(null=False, choices=TO_CHOICES)
在您给出的示例中,我将使用choice
参数。 如果您将to
字段的验证放在 clean 方法中,那么任何错误都将与操作实例相关联,而不是与to
字段相关联。
如您所述, clean_<fieldname>
方法适用于表单字段。 在 model 上,您可以定义验证器。
这是一个将您的 clean 方法重写为验证器的示例。
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])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.