Как вывести сообщения об ошибках или валидации в ModelForm в 2022 году

Я потратил несколько часов на изучение интернета, особенно официальной документации Django, но до сих пор мне не ясно, какой вариант лучше в 2022 году (так как почти все вопросы, которые я читаю на SO, > 6 yo) и есть разные мнения о том, лучше ли хрустящие формы или нет.

Рекомендуется ли использовать хрустящие формы?

Как я могу (и какой наиболее рекомендуемый способ) получить типичные сообщения об ошибках валидации?

Например: "this field is mandatory" или "this input accepts numbers only"? Я видел некоторые страницы Django, использующие эти сообщения по умолчанию, но я не знаю, как показать их в моих ModelForm полях.

Допустим, у меня есть следующая модель:

class Project(models.Model):
    project_name = models.CharField(max_length=250, null=False, blank=False)
    status = models.CharField(
        max_length=250, 
        null=True, 
        blank=True, 
        default=PROJECT_STATUS_DEFAULT,
        choices=PROJECT_STATUS,
    )
    creation_date = models.DateField(max_length=250, null=False, blank=False)
    project_code = models.IntegerField(null=True, blank=True)
    notes = models.CharField(max_length=250, null=True, blank=True)

Для модели Project у меня есть следующее ModelForm:

class CreateNewProjectForm(ModelForm):
    creation_date = forms.DateField(widget=forms.DateInput(format = '%d/%m/%Y'), input_formats=settings.DATE_INPUT_FORMATS) #UK Date format
    class Meta:
        model = Project
        fields = '__all__'

Вид, когда я пытаюсь создать новый объект Project:

def add_new_project(request):
    context = {}
    if request.method == 'POST':
        form = CreateNewProjectForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('project_page')
        else:
            print (form.errors)
            form = CreateNewProjectForm()
        context['form'] = form
    return render(request, 'new_project.html', context)

HTML часть:

Вы можете указать ошибку для каждого поля следующим образом

{% if form.field_name.errors %}
  {{ form.field_name.errors }}
{% endif %}
Вернуться на верх