【问题标题】:Django model field validation without a custom form没有自定义表单的 Django 模型字段验证
【发布时间】:2012-08-21 02:38:18
【问题描述】:

我在我的模型中使用 django DateField。

class CalWeek(models.Model):
  start_monday = models.DateField(verbose_name="Start monday")

我有一个特定于我的 modelField 的自定义验证方法:我想确保它实际上是星期一。我目前没有理由在管理员中使用自定义 ModelForm —— Django 生成的那个很好。创建一个自定义表单类,以便我可以使用 django 表单类提供的clean_start_monday(self)1 糖,这似乎需要大量工作才能添加一些字段验证。我意识到我可以override the model's clean method 并在那里提出ValidationError。然而,这并不理想:这些错误被归为非字段错误并最终出现在页面顶部,而不是出现在有问题的用户输入旁边——这不是理想的用户体验。

是否有一种简单的方法来验证特定模型字段并将错误消息显示在管理员字段旁边,而无需使用自定义表单类?

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    您可以查看 Django Validators。

    https://docs.djangoproject.com/en/dev/ref/validators/

    您可以将验证器放在类之前,然后在字段中设置验证器。

    def validate_monday(date):
        if date.weekday() != 0:
            raise ValidationError("Please select a Monday.")
    
    class CalWeek(models.Model):
        start_date = models.DateField(validators=[validate_monday])
    

    【讨论】:

    • 不错!我不知道我怎么会忽略这一点。
    • 酷!以前没用过,但是这个……很干净。发布干净的验证器!
    猜你喜欢
    • 2012-12-11
    • 2016-02-01
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    • 2021-06-22
    相关资源
    最近更新 更多