使用jQuery Formset 1.3-pre
如果我使用jquery-formset删除现有表单,那么在同一页面上添加一个新表单并点击保存,我收到此错误:
Request Method: POST
Django Version: 1.7
Exception Type: ValidationError
Exception Value: ["'' value must be an integer."]
导致错误的值似乎是:
self django.db.models.fields.AutoField: id
只有在添加新表单以替换一个formset会话中的已删除表单时才会发生这种情况。如果我删除,保存,添加,保存,那很好。只有当我删除,添加,保存时才会收到此错误。
我认为django使用TOTAL-FORMS和INITIAL-FORMS变量来计算它是处理新的还是预先存在的表单,但因为我返回的表单数量与INITIAL-FORMS相同,即使其中一个表单是一个新表单,它认为所有表单都是预先存在的表单并尝试验证id。无论如何,还是那样的东西。
有没有办法为新表单添加前缀,告诉django它处理添加的表单,以便它不会尝试验证ID?
我错过了什么?
感谢
约翰
PS可能是相关的,可能不是:我的jquery.formset删除例程使用ajax从数据库中删除任何与现有表单对应的行。我从来没有找到任何关于动态删除表单的文档,所以我只是认为这就是我应该做的。
答案 0 :(得分:3)
如果您的表单集包含现有实例的表单和空白行的表单,则需要通过从HTML行类中删除“dynamic”来从jquery-formset控件中删除现有实例的表单。像这样:
{% for a_form in my_formset %}
<tr {% if not a_form.instance.pk %}class="dynamic"{% endif %}>
{{ a_form.id }}
<td>{{ a_form.a_field }}</td>
<td>{{ a_form.another_field}}{{ a_form.another_field.errors }}</td>
<td>{% if a_form.instance.pk %}{{ a_form.DELETE }}{% endif %}</td>
</tr>
{% endfor %}
这不仅会阻止jquery-formset弄乱现有记录的表单,而且会产生Django表单所期望的删除复选框。
如果允许class = dynamic用于现有记录,则jquery-formset将创建一个“删除”链接,允许用户从POST数据中完全删除它们。您收到错误消息,因为现有记录已从POST中删除并替换为空白表单。错误[“''值必须是整数。”]指的是记录的ID从整数变为空字符串。