【问题标题】:Model Formset Issue模型表单集问题
【发布时间】:2010-10-26 05:09:12
【问题描述】:

我有一个模型需要多次显示表单。我在模型集下使用过它。我似乎对这个模型的 id 有疑问,它也是模型的主键。
我使用要编辑的数据预填充表单集。
但是,每当我单击提交时,它都会刷新页面,并显示一条错误消息“(隐藏字段 ID),此无已存在。”
此错误专门针对隐藏的“id”字段

<input type="hidden" id="id_form-0-id" value="2972" name="form-0-id"/>

这是模板中的 sn-p。 (我从萤火虫那里得到的) 可能是什么问题,因为表单无效我无法保存数据。

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')) 

这是代码 sn-p。

【问题讨论】:

  • 请不要将代码放在评论中。请更新问题。

标签: django forms formset


【解决方案1】:

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

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

class Meta:
    ordering = ('some_field',)

看看能不能解决问题。

【讨论】:

  • 我有 Django 1.1 和 MySQL,这也为我修复了它。其实我有这个问题是因为我引入了一个抽象模型,并将Meta移到那里,并没有显式继承meta。
【解决方案2】:

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

  • 您在表单集中使用的 Django 表单对象不包括模型的主键 (id)。但是,由于您使用的是 modelformset_factory,因此情况并非如此(您也不会收到该错误消息)。

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

目前我想不出更多原因,但我确信它们都将与从浏览器客户端返回的表单有关,但不知何故缺少 id 字段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    • 2010-10-28
    • 2015-02-28
    • 2011-11-07
    相关资源
    最近更新 更多