【问题标题】:Django-admin clean_fields override, keeps previous data on submitDjango-admin clean_fields 覆盖,保留以前的数据提交
【发布时间】:2011-05-21 12:34:33
【问题描述】:

我的问题很简单,我的应用模型中有一个类继承自 models.Model

我正在重写 django-admin 的 clean_fields 方法,以便对我的表单执行一些自定义验证。 问题是,当它从我的自定义验证中引发 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)

任何帮助将不胜感激!

最好的问候

【问题讨论】:

  • 我有一种预感,您的问题与操作此模型的视图/表单有关。你有机会发布吗?

标签: django validation django-admin django-forms


【解决方案1】:

您应该使用clean() 方法而不是clean_fields()。这在Django documentation 中很清楚。

【讨论】:

    猜你喜欢
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 2017-05-26
    • 2017-10-14
    • 2015-07-16
    • 2019-08-15
    • 2021-06-10
    相关资源
    最近更新 更多