关于stackoverflow中或多或少相同的问题有几个问题,但似乎没有一个涵盖我可以预见的问题。由于我的 django 知识有限,我可能反应过度......所以......
我想用 django 完成的是在同一视图中编辑 2 个模型 List 和 ListItem。列表作为普通表单,列表项作为内联表单集。创建这两种形式不是问题。将它们传递到视图 > 模板中也不是问题。
我担心的是,
1)如何将它们发布到相同的地址并处理该发布请求。
2) 如何使用 javascript 设置从该表单集中添加/删除那些内联 ListItems。
2.1)如果我向某个地址发送 ajax 请求以删除 ListItem 对象,然后使用 javascript 删除表单的该部分。django 视图部分如何知道要从数据库中删除哪个对象?我是否需要将对象的 ID 传递给模板,以便我可以使用 ajax 将其发送回查看?
2.2)如果在我删除/添加行之后发布了整个更改的 ListItem 内联表单集,那么它不会引起问题,因为最初使用的对象字典在两者之间发生了更改?
3)有人可以看到任何其他陷阱吗?
顺便说一句,我不想通过代码示例。如果可以的话,请解释一下事情是如何运作的以及我应该做什么并牢记在心。如果您知道最新的示例,那么我也可以使用一些链接。
编辑(并回答我自己的问题):我试过了,这就是我发现的:1)只是把它们摆出来......因为你可以这样做:
form = ListForm(request.POST, instance=l)
formset = ShoppingListFormSet(request.POST, instance=l)
然后做任何需要的事情——非常简单和容易。
2)复制现有的行/表格或删除一个。您需要记住的是元素名称是正确的,并且 formset 使用 {{ form.management_form }} 加载的内容包含最新且正确的信息以及有多少表单。所有字段名称也需要是最新的。如果您从表格 1 和表格 3 之间删除表格,则表格 3 的编号需要更改为 2,依此类推。
2.1)可以从{{ form.initial.id }}中提取元素id,然后在form中使用
2.2) 如果 form.management_form 信息正确且字段名称是最新的,则否(请参阅 2.)
3)只需要建立视图,所以你的网站不会被跨站请求伪造破坏(见http://docs.djangoproject.com/en/dev/ref/contrib/csrf/)
艾伦。