0

关于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/

艾伦。

4

1 回答 1

1

你描述的方式很好。实际上,我刚刚发布了另一个 Django 问题的类似答案,您可以在此处看到 - Django add/remove form without multiple submit 当然,不同之处在于没有 javascript 可以进行花哨的 AJAX 和客户端 HTML 修改。

上面提到的 REST 的基本要点(我知道过于简化了)是一切都可以通过 URL 访问。“Django 知道要删除哪条记录”的方式是,对于每个 URL,它都有一个映射到它的给定视图。视图接收记录 ID,然后知道要删除哪一个。

如果您还没有开始使用 AJAX,我建议您研究一下Jquery,因为它提供了一些非常易于使用的包装器,这些包装器围绕内置在浏览器中的 XML 请求对象。

顺便说一句,这只是一个建议,因为听起来你是新手——首先在没有 ajax 的情况下让一切正常工作(即使执行操作会导致白屏或界面不佳),然后再添加 ajax。当您不关心 AJAX 时,很容易调试,然后在您知道它在服务器端工作后添加 AJAX。

于 2009-09-10T18:26:08.510 回答