我认为开始使用模型表单而不是常规表单会更容易(放弃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文档错了吗?
提前致谢。
答案 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
不会触发任何验证,因为没有新的要验证。