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

Ben*_*rts 13 django django-models

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

class CalWeek(models.Model):
  start_monday = models.DateField(verbose_name="Start monday")
Run Code Online (Sandbox Code Playgroud)

我有一个特定于我的modelField的自定义验证方法:我想确保它实际上是星期一.我目前没有理由在管理员中使用自定义的ModelForm - Django生成的一个就好了.创建一个自定义表单类只是为了我可以利用django Form类提供的clean_start_monday(self)1糖似乎只是添加一些字段验证的很多工作.我意识到我可以覆盖模型的干净方法并在ValidationError那里提升.但是,这并不理想:这些错误归结为非字段错误并最终位于页面顶部,而不是有问题的用户输入旁边 - 不是理想的用户体验.

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

jro*_*585 19

你可以看看Django Validators.

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

您可以将验证器放在类之前,然后在Field中设置验证器.

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])
Run Code Online (Sandbox Code Playgroud)