没有自定义表单的Django模型字段验证

标签 django django-models

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

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

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

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

最佳答案

您可以查看 Django 验证器。

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])

关于没有自定义表单的Django模型字段验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12127900/

相关文章:

django - 将未绑定(bind)的表单转换为绑定(bind)的表单?

python - Django prefetch_related 从具有多个多对多关系的模型

django-models - Django 管理员错误指出表单中缺少一个字段

Django:获取外键类型

python - 为什么表单 "save()"方法的签名应该与 django 中的基 Form 类匹配?

python - 在 Django 中提供动态生成的 ZIP 文件

python - 在 Django >=1.10 中初始化(未从数据库加载)后立即访问字段时,如何对自定义模型字段调用 to_python?

django - KeyError : ('profiles' , 'talk' ) - 我该如何解决?

django - 在 Django Rest Framework 中访问 .data 后更新序列化器中的值

python - 如何将属性或对象注入(inject)到 Django Rest Framework 中的 View 中?