Почему словарь 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'})