处理Django中的模型表单

时间:2013-05-12 05:53:25

标签: django django-forms

我认为开始使用模型表单而不是常规表单会更容易(放弃modelform提供的所有简单的事情)。 但是当我尝试这样做时:

>>> m = Model.objects.get(pk=1)
>>> f = ModelForm(instance=m)
>>> f.is_valid()
False
>>> f.save()
AttributeError: 'ModelForm' objects has no attribute 'cleaned_data'

我认为django documentation错误地说:

  

ModelForm生成的每个表单都有一个save()方法。这个   method从绑定的数据创建并保存数据库对象   表格。 ModelForm的子类可以接受现有模型   instance作为关键字参数实例;如果这是提供的,save()   将更新该实例。如果没有提供,save()将创建一个   指定模型的新实例

因为这对我不起作用。

我认为django文档错了吗?

提前致谢。

1 个答案:

答案 0 :(得分:5)

您可能忘记根据用户的请求将“数据”添加到ModelForm实例中.POST数据。

f = ModelForm(data=request.POST, instance=m)
f.is_valid()  # is True if the data is ok.

在任何情况下,最好发布相关代码:模型类,模型表单类和视图。

编辑:必须data=参数(或第一个参数,如果您没有命名)添加到ModelForm初始化,如果您需要{{ 1}}工作。 is_valid()可以根据各种验证规则检查给定的数据,只有在没有问题的情况下才允许您保存is_valid。仅使用ModelForm命名参数初始化ModelForm不会触发任何验证,因为没有新的要验证。