2013-05-12 57 views
1

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

>>> 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()方法。这个 方法创建并保存数据库对象的数据绑定到 表单。 ModelForm的子类可以接受现有的 实例作为关键字参数实例;如果提供了,则save() 将更新该实例。如果没有提供,save()会创建一个 指定模型的新实例

原因这只是对我而言不起作用。

我说django文档错了吗?

在此先感谢。

回答

5

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

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

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

编辑:您必须添加data=参数(或第一个参数,如果你不命名),以一个ModelForm初始化,如果你想is_valid()工作。 is_valid在这里是根据各种验证规则来检查给定的数据,并且只有在没有问题的情况下才可以保存ModelForm。使用instance= named参数初始化ModelForm不会触发任何验证,因为没有什么新的验证。

+0

你知道,在这种情况下,使用ModelForm(无论,instance = m)还是ModelForm(data = whatever,instance = m)的结果是相同的。不过,我不能只更新一个字段,它说每个字段都是必需的,因此使is_valid返回False。但这一定与我的模型有关。 – 2013-05-12 18:29:50

+0

是的,我知道。您的代码段只包含ModelForm初始化的“instance =”参数。另外:请在你的问题中包含更多相关的代码。而且:在你提到的这一段中,Django文档绝对没有错。 – mawimawi 2013-05-12 18:38:12