什么时候在Django中填充了clean_data

时间:2014-07-23 03:51:14

标签: python django django-forms

我有一个model_formset,使用can_delete = True创建,并将相应的form.DELETE复选框添加到模板中。 当我收到POST请求时,我尝试保存表单:

if formset.is_valid():
    formset.save()

但是,在is_valid方法中,django确定删除的表单不能删除,当然,它不会验证。

我检查了源代码,似乎'DELETED'没有进入clean_data。 Django执行此检查:

def _should_delete_form(self, form):
    return form.cleaned_data.get(DELETION_FIELD_NAME, False)

我检查了request.POST字典,检查就在那里,这意味着它应该在clean_data dict中。

此dict何时填充,以便我可以进一步跟踪问题?我似乎没有找到它并怀疑它与某些元类

有关

1 个答案:

答案 0 :(得分:1)

你需要对源代码进行一些处理:

首先,is_valid is defined as

def is_valid(self):
    """
    Returns True if the form has no errors. Otherwise, False. If errors are
    being ignored, returns False.
    """
    return self.is_bound and not self.errors

self.errors is a property

@property
def errors(self):
    "Returns an ErrorDict for the data provided for the form"
    if self._errors is None:
        self.full_clean()
    return self._errors

调用self.full_clean()。现在这个方法已经

self._clean_fields()
self._clean_form()
self._post_clean()

填充cleaned_data并进行必要的验证/处理。