Django, Models & Forms: заменить сообщение «Это поле обязательно для заполнения» - PullRequest
14 голосов
/ 22 марта 2011

Я знаю, как устанавливать собственные сообщения об ошибках при использовании обычных форм Django.Но как насчет формы Django, основанной на существующей модели?Рассмотрим следующую модель и форму:

Class MyModel(models.Model):
    name = models.CharField(max_length='30')

Class MyForm(forms.ModelForm):
    Class Meta:
        model = MyModel

Если я создаю такую ​​форму и пытаюсь опубликовать ее, появляется сообщение «Это поле обязательно для заполнения».Но как это изменить?Конечно, я мог бы сделать что-то вроде этого:

Class MyForm(forms.ModelForm):
    model = forms.CharField(error_messages = {'required': "something..."})
    Class Meta:
        model = MyModel

Но согласно документации, атрибут max_length не будет сохранен, и я должен явно записать его в определение формы.Я думал, что цель Model Forms - не писать один и тот же код дважды.Таким образом, должен быть какой-то простой способ изменить пользовательское сообщение об ошибке, не переписывая всю форму.В принципе, для меня было бы достаточно, если бы мое сообщение выглядело примерно так: «Поле 'name' обязательное".

Пожалуйста, помогите.

Ответы [ 2 ]

33 голосов
/ 22 марта 2011
class MyForm(forms.ModelForm):
    class Meta:
            model = MyModel

    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        self.fields['name'].error_messages = {'required': 'custom required message'}

        # if you want to do it to all of them
        for field in self.fields.values():
            field.error_messages = {'required':'The field {fieldname} is required'.format(
                fieldname=field.label)}
0 голосов
/ 22 марта 2011

вы можете изменить атрибуты поля во время выполнения, в методе __init__.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...