模型Formset问题

时间:2009-05-14 14:53:19

标签: django forms formset

我有一个模型,需要多次显示表单。我在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')) 

这是代码段。

2 个答案:

答案 0 :(得分:1)

如果您在1.1beta之前使用PostgreSQL和任何版本的Django,并且您的模型没有定义默认排序,我想您可能会看到与从数据库返回的对象的排序不一致相关的错误(请参阅Django Trac门票9076975810163等。

尝试在模型上设置默认排序:

class Meta:
    ordering = ('some_field',)

看看是否能解决问题。

答案 1 :(得分:0)

我认为此错误是由以下原因之一引起的:

  • 您在formset中使用的Django表单对象不包含模型的主键(id)。但是,由于您使用的是modelformset_factory,因此不应该出现这种情况(您也不会收到该错误消息)。

  • 模板中的HTML表单不包含主键,即使是隐藏字段也是如此。确保在{{ form.id }}循环内的模板中有{{ for form in formset }}或类似内容。

我现在想不出任何其他理由,但我确信它们都与表单相关,从浏览器客户端返回的表单错过了id字段。