Проверка поля модели Django без пользовательской формы

Я использую django DateField в моей модели.

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

У меня есть специальный метод проверки, который специфичен для моего modelField: я хочу убедиться, что это действительно понедельник. В настоящее время у меня нет оснований использовать пользовательский ModelForm в админе, который генерирует Django. Создание пользовательского класса формы, так что я могу использовать clean_start_monday(self) 1 сахар, который предоставляет классы классов django, похоже, очень много, просто чтобы добавить некоторые проверка поля. Я понимаю, что переопределяет метод чистой модели и поднимает ValidationError там. Однако это не идеально: эти ошибки приписываются как ошибки, отличные от полей, и заканчиваются вверху страницы, а не рядом с проблемным пользовательским вводом - не идеальным UX.

Есть ли простой способ проверить конкретное поле модели и показать сообщение об ошибке рядом с полем в админе, не используя специальный класс формы?

Ответ 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])