Добавление проверки формы в django modelform путем переопределения clean - PullRequest
0 голосов
/ 18 марта 2019

У меня длинная форма модели, в основном с проверкой формы модели, и я хотел бы иметь ошибку " Пожалуйста, исправьте ошибки ниже " в верхней части формы, когда какое-либо из отдельных полей не может проверки. Я попытался сделать это, переопределив метод clean в модели, но на данный момент ошибок нет.

# models.py
class MyModel(models.Model):
    myfield = models.IntegerField(default=0, validators=[MinValueValidator(0)])

# forms.py
class MyModelForm(forms.ModelForm)
    class Meta:
        models = MyModel
        fields = ['myfield']

    def clean(self):
        cleaned_data = super().clean()
        if any([field.errors for field in self]):
            raise forms.ValidationError("Please correct the errors below.")
        return cleaned_data

Когда я ввожу недопустимое значение, такое как -1, поле все еще показывает правильное сообщение об ошибке под ним, но в форме нет ошибок.

Я использую {% crispy %} для визуализации формы, которая автоматически помещает ошибки формы вверху, так что это не проблема шаблона.

Проблема (от отладчика) в том, что в момент вызова clean(), form['myfield'].errors пусто.

Ответы [ 2 ]

2 голосов
/ 18 марта 2019

Это не то, что вы бы сделали в форме. Вы бы сделали это в шаблоне:

{% if form.errors %}
    Please correct the errors below.
    ... now list the errors ...
{% endif %}

На самом деле, это именно то, что шаблон формы изменения администратора делает.

0 голосов
/ 18 марта 2019

Как говорит Даниэль, вы обычно проверяете form.errors в шаблоне вместо того, чтобы вызывать еще одну ошибку в чистом методе.

Если вы действительно хотите сделать это в методе clean, тогда отметьте self.errors вместо отдельных полевых ошибок.

def clean(self):
    cleaned_data = super().clean()
    if self.errors:
        raise forms.ValidationError("Please correct the errors below.")
    return cleaned_data
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...