Подтвердить что ты не робот

Django, Models & Forms: заменить сообщение "Это поле обязательно"

Я знаю, как устанавливать собственные сообщения об ошибках при использовании обычных Django Forms. Но как насчет формы 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 состоит в том, чтобы не писать один и тот же код дважды. Поэтому должен быть простой способ изменить собственное сообщение об ошибке без перезаписи всей формы. В принципе, для меня было бы достаточно, если бы мое сообщение выглядело примерно так: "Требуется имя поля".

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

4b9b3361

Ответ 1

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

Ответ 2

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