我有一个模型,需要多次显示表单。我在modelformset下使用过它。我似乎对这个模型的id有问题,这也是该模型的主键
我使用我想编辑的数据预填充formset
但是每当我点击提交时,它都会刷新页面并返回错误,上面写着'(隐藏字段ID),此处已经存在。'
此错误专门针对隐藏的“id”字段
<input type="hidden" id="id_form-0-id" value="2972" name="form-0-id"/>
这是模板的摘录。 (我是从firebug得到的) 由于表单无效,问题可能是什么我无法保存数据。
ProfilesFormSet = modelformset_factory(Profile,exclude = ( <items spearated by commas>), extra=0)
profile_form_set = ProfilesFormSet(queryset = Profile.objects.filter(userprofile=userprofile).order_by('-modified_on'))
这是代码段。
答案 0 :(得分:1)
如果您在1.1beta之前使用PostgreSQL和任何版本的Django,并且您的模型没有定义默认排序,我想您可能会看到与从数据库返回的对象的排序不一致相关的错误(请参阅Django Trac门票9076,9758,10163等。
尝试在模型上设置默认排序:
class Meta:
ordering = ('some_field',)
看看是否能解决问题。
答案 1 :(得分:0)
我认为此错误是由以下原因之一引起的:
您在formset中使用的Django表单对象不包含模型的主键(id)。但是,由于您使用的是modelformset_factory,因此不应该出现这种情况(您也不会收到该错误消息)。
模板中的HTML表单不包含主键,即使是隐藏字段也是如此。确保在{{ form.id }}
循环内的模板中有{{ for form in formset }}
或类似内容。
我现在想不出任何其他理由,但我确信它们都与表单相关,从浏览器客户端返回的表单错过了id字段。