Почему словарь error_messages не работает в классе Meta в forms.py?

Мой forms.py

from django.core.exceptions import ValidationError
from django.forms import ModelForm
from django import forms
from . models import Detail

class DetailForm(ModelForm):
name = forms.CharField(validators=[not_contain_number], required=True)
email = forms.EmailField(required=True)
phone_no = forms.IntegerField(
    validators=[number_validation], required=True)
class Meta:
    model = Detail
    error_messages = {
        'name': {
            'required': 'enter your name',
        },
    }
    labels = {'name': 'Your Name', 'email': 'Your Email',
              'phone_no': 'Your Phone No.'}
    widgets = {'name': forms.TextInput(
        attrs={'placeholder': 'type your Name'})}
    fields = ['name', 'email', 'phone_no']

Происходит ли это из-за моей ошибки в ModelForm API?

Он работает, когда я использовал его при определении:

class DetailForm(ModelForm):
        name = forms.CharField(validators=[not_contain_number], required=True,error_messages={'required': 'Enter Your Name'})

От [Django-doc]

Поля, которые генерируются автоматически, зависят от содержимого класса Meta и от того, какие поля уже были определены декларативно. В основном, ModelForm будет генерировать только те поля, которые отсутствуют в форме, или, другими словами, поля, которые не были определены декларативно

.

Атрибуты widgets, labels, help_texts или error_messages работают только для полей, генерируемых автоматически в виде кавычек

Поля, определенные декларативно, оставляются как есть, поэтому любые настройки, сделанные для атрибутов Meta, таких как виджеты, метки, help_texts или error_messages, игнорируются; они применяются только к полям, которые генерируются автоматически.

По этой причине атрибут error_messages класса Meta получил ignored.

Он работает, когда я использовал его при определении:

Да, вы можете определить error_messages как атрибуты класса, как определено вами как

class DetailForm(ModelForm):
    name = forms.CharField(validators=[not_contain_number], required=True,error_messages={'required': 'Enter Your Name'})
Вернуться на верх