Django-admin clean_fields переопределяет, сохраняет предыдущие данные при отправке - PullRequest
3 голосов
/ 07 декабря 2010

Мой вопрос довольно прост, у меня есть класс в моей модели приложения, который наследуется от models.Model.

Я переопределяю метод clean_fields django-admin, чтобы выполнить некоторыетаможенная проверка моей формы.Проблема в том, что когда он выдает ValidationError из моей пользовательской проверки, если пользователь пытается снова отправить форму с правильной информацией, он всегда сохраняет данные из предыдущей отправки.

class SignedOffModelValidation(models.Model):
    class Meta:
        abstract = True

    def clean_fields(self, exclude = None):
        super(SignedOffModelValidation, self).clean_fields(exclude)

        errors = {}
        if getattr(self, self._meta.immutable_sign_off_field, False):
            relation_fields = [
                f for f in self._meta.fields
                if isinstance(f,(models.ForeignKey,models.ManyToManyField,))
                and not f.name.endswith('_ptr')
            ]

            for field in relation_fields:
                try:
                    field_value = getattr(self, field.name)
                    signed_off = getattr(
                        field_value,
                        field_value._meta.immutable_sign_off_field
                    )
                except (AttributeError, ObjectDoesNotExist,):
                    continue
                else:
                    if not signed_off:
                        msg = u'In order to signeoff, %s needs to be Signed Off' % \
                            (str(field_value),)
                        errors[field.name] = ([msg])
            if errors:
                raise ValidationError(errors)

Любойбыла бы признательна за помощь!

С наилучшими пожеланиями

1 Ответ

2 голосов
/ 11 декабря 2011

Вы должны использовать метод clean() вместо clean_fields(). Это довольно ясно в документации Django .

...