How to modify the display of a validation error in Django?

I wanted to create simple datepicker that does not accept back dates. Within my models.py I have defined MealDay class and standalone functionvalidate_pub_date. The logic behin works just fine, but I do not understand the way Django is showing up the ValidationError("Date can't be past!").

Why this is where it is, and why it seems to be within <li> tag? Is there any possibilty to handle the error within the HTML template or any other way to add some html/css to it? There is how the error looks now:

enter image description here

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 %}

in django model (validate_field_name) method is connected with .is_valid() method so when all fields of modelform not get correct input till it's raise a validation error.

Back to Top