Как изменить отображение ошибки валидации в Django?
Я хотел создать простой datepicker, который не принимает обратные даты. В своем models.py я определил класс MealDay
и отдельную функцию validate_pub_date
.
Логика работает отлично, но я не понимаю, как Django отображает ValidationError("Date can't be past!")
.
Почему это происходит именно здесь, и почему это происходит именно в теге <li>
? Есть ли возможность обработать ошибку в HTML шаблоне или каким-либо другим способом добавить к нему html/css? Вот как ошибка выглядит сейчас:
models.py:
def validate_pub_date(value):
if value < timezone.now() - datetime.timedelta(days=1):
raise ValidationError("Date can't be past!")
return value
class MealDay(models.Model):
day = models.DateTimeField(default=timezone.now().day, validators = [validate_pub_date])
breakfast = models.TextField(max_length=100, blank=True)
lunch = models.TextField(max_length=100)
dinner = models.TextField(max_length=100, blank=True)
views.py
class MealdayCreateView(CreateView):
model = MealDay
template_name = "mealplanner/mealday_new.html"
form_class = CreateMealdayForm
forms.py
class CreateMealdayForm(ModelForm):
class Meta:
model = MealDay
fields = '__all__'
widgets = {
'day': forms.DateInput(attrs={'type':'date'}),
}
mealday_new.html
{% extends "mealplanner/base.html" %}
{% block content %}
<h1>Plan your meals!</h1>
<form action="" method="post"> {% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Save">
</form>
{% endblock content %}
{% endblock content %}
в django model (validate_field_name) метод связан с методом .is_valid(), поэтому, когда все поля modelform не получают корректного ввода, возникает ошибка валидации.