Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从同一页面、内联和添加/删除这些内联发布多个django表单_Django_Forms_Inline Formset - Fatal编程技术网

从同一页面、内联和添加/删除这些内联发布多个django表单

从同一页面、内联和添加/删除这些内联发布多个django表单,django,forms,inline-formset,Django,Forms,Inline Formset,在stackoverflow中,有几个问题或多或少都是关于同一个问题的,但它们似乎都没有涵盖我所能预见的问题。由于我的django知识有限,我可能反应过度。。。所以 我想用django完成的是在同一个视图中编辑两个模型,List和ListItem。列表为公共表单,列表项为inlineformset。创建这两种形式不是问题。将它们传递到视图>模板中也不是问题 我担心的是, 1) 如何将它们发布到同一地址并处理该post请求 2) 如何设置使用javascript从此表单集中添加/删除这些内联列表项

在stackoverflow中,有几个问题或多或少都是关于同一个问题的,但它们似乎都没有涵盖我所能预见的问题。由于我的django知识有限,我可能反应过度。。。所以

我想用django完成的是在同一个视图中编辑两个模型,List和ListItem。列表为公共表单,列表项为inlineformset。创建这两种形式不是问题。将它们传递到视图>模板中也不是问题

我担心的是,

1) 如何将它们发布到同一地址并处理该post请求

2) 如何设置使用javascript从此表单集中添加/删除这些内联列表项

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,然后在表单中使用

2.2)如果form.management\u表单信息正确且字段名称是最新的,则为否(参见2.)

3) 只需构建视图,您的站点就不会被跨站点请求伪造所破坏(请参阅)


艾伦。

你描述做这件事的方式很好。实际上,我刚刚发布了另一个Django问题的类似答案,您可以在这里看到——这里的区别当然是,没有javascript来进行奇特的AJAX和客户端HTML修改

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

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


顺便说一句,这只是一个建议,因为听起来你是新手——首先在没有ajax的情况下让一切正常工作(即使这样做会导致白色屏幕或糟糕的界面),然后再添加ajax。当您对AJAX不感兴趣时,可以很容易地进行调试,然后在您知道它在服务器端可以正常工作后添加AJAX。

我建议您查看REST。我浏览了这篇文章,我不得不承认,我不明白这将如何回答我的问题。也许我对编程不感兴趣,我也不想成为一名程序员。我只想学习足够的python/django来实现我目前的目标。在那个帖子里可能有一些对我有用的东西,但现在我不明白你们认为我应该从中学到什么?谢谢你们解释剩下的内容。我曾考虑过按照您在另一个答案中解释的方式处理表单集元素的删除,但我并没有将其与其余部分结合起来。建议我先不使用ajax也很明智,这正是我要做的。谢谢我以前曾玩弄过ajax调用,到目前为止,我发现jquery在django中工作得非常好。但所有这些仍然没有回答我最严重的担忧——如何处理同一url上的发布表单和内联表单集,以及会发生什么。。。。。。。此表单集将3项加载到模板时。如果我使用非ajax调用删除其中一个from,那么我可能会这样做,dorequestonurl,它包含所有需要理解的信息,我想删除一个ListItem对象,它会删除它并将我发送回以前的视图/url。这将为此内联表单集创建更新的查询集。但是,据我所知,ajax调用只执行删除操作,js从模板中删除对象,但queryset不会得到更新。然后呢?我是不是把事情搞得太复杂了,django只是“处理好了”?好吧,我继续,只是测试了将多个表单发布到同一地址的工作原理,它的工作原理与发布单个表单的工作原理相同。谁会想到这很容易呢:P。现在只是添加和删除行还有待测试。