【问题标题】:Django forms: cannot call form.cleanDjango 表单:无法调用 form.clean
【发布时间】:2012-04-12 03:22:56
【问题描述】:

考虑以下堆栈跟踪:

In [3]: f.clean()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\core\management\commands\shell.pyc in <module>()
----> 1 f.clean()

C:\Users\Marcin\Documents\oneclickcos\oneclickcos\mainapp\incorporate_helpers.pyc in clean(self)
    569         This checks the relations between fields, ensures consistent state, and exports bits about the state of the form that can be used in subsequent
validations
    570         """
--> 571         cleaned_data = super(IncorporateForm, self).clean()
    572         #logger.debug('IncorporationForm.cleaned_data: ' + str(cleaned_data))

    573         try:

C:\Users\Marcin\Documents\oneclickcos\oneclickcos\mainapp\incorporate_helpers.pyc in clean(self)
    402
    403     def clean(self):
--> 404         cleaned_data = super(CreateForm, self).clean()
    405         # trying to use an empty pk can result in a ValueError. Easier to expunge.

    406         if cleaned_data.get('pk', None) == '': del cleaned_data['pk']

C:\Users\Marcin\Documents\oneclickcos\lib\site-packages\django\forms\forms.pyc in clean(self)
    315         association with the field named '__all__'.
    316         """
--> 317         return self.cleaned_data
    318
    319     def has_changed(self):

AttributeError: 'IncorporateForm' object has no attribute 'cleaned_data'

(所有相关代码都显示在上面的跟踪中)。

我的代码符合https://docs.djangoproject.com/en/1.4/ref/forms/validation/#cleaning-and-validating-fields-that-depend-on-each-other 的示例;但是,似乎 BaseForm 返回期望 cleaned_data 存在。

我在文档中没有看到在调用clean 之前创建cleaned_data 是用户代码的责任。是什么赋予了?这是 Django 中的错误吗?

django 1.4 和 1.3.1 出现错误。

【问题讨论】:

    标签: python django django-forms


    【解决方案1】:

    据我所知,文档从不建议您直接致电 form.clean()。大多数时候(一直?),你想打电话给form.is_valid()

    在后台,调用is_valid() 会导致调用full_clean() 方法,该方法设置cleaned_data

    【讨论】:

      【解决方案2】:

      您根本不应该直接致电clean。你应该打电话给form.is_valid()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-11
        • 1970-01-01
        • 2014-03-03
        • 2013-02-28
        • 2015-12-24
        • 2021-10-05
        相关资源
        最近更新 更多