从模型表单集django动态删除表单

从模型表单集django动态删除表单,django,django-models,django-forms,Django,Django Models,Django Forms,我有一个网页,用户可以动态添加和删除django表单集的表单 我已经阅读了,基于它,我可以动态地将表单添加到表单集中。现在我想动态删除表单集。我看过 我希望这样做的方式是,当用户单击delete时,我有一个ajax函数,可以从数据库中删除表单实例记录。当我的ajax函数返回时,我保持相同的总表单数和初始表单数,只隐藏表单html,这样即使删除的记录也会在我的帖子中提交 最初,表单集将其表单元素呈现为: #form0 <input id="id_formprefix-0-id" type =

我有一个网页,用户可以动态添加和删除django表单集的表单

我已经阅读了,基于它,我可以动态地将表单添加到表单集中。现在我想动态删除表单集。我看过

我希望这样做的方式是,当用户单击delete时,我有一个ajax函数,可以从数据库中删除表单实例记录。当我的ajax函数返回时,我保持相同的总表单数和初始表单数,只隐藏表单html,这样即使删除的记录也会在我的帖子中提交

最初,表单集将其表单元素呈现为:

#form0
<input id="id_formprefix-0-id" type ="hidden "value="something" name="formprefix-0-id">
<input id="id_formprefix-0-field" value="something" type="text" name="formprefix-0-field">
#form1
<input id="id_formprefix-1-id" type ="hidden "value="something" name="formprefix-1-id">
<input id="id_formprefix-1-field" value="something" type="text" name="formprefix-1-field">
#form2
<input id="id_formprefix-2-id" type ="hidden "value="something" name="formprefix-2-id">
<input id="id_formprefix-2-field" value="something" type="text" name="formprefix-2-field">
当我保存表单集而不删除任何记录时,保存工作正常,并打印正确的
form.instance.id
。 但是,如果我使用ajax删除表单实例,然后尝试保存表单集,则
print(form.instance.id)
对于已删除的记录,似乎会打印数据库中第一个可用的id,但不会打印通过post提交的id。(当记录被删除时,该id不在数据库中,但它是否应该打印通过POST权限提交给它的内容?)

如果在没有try/catch循环的情况下执行此操作,则会通过form.errors得到以下错误:

<ul class="errorlist"><li>id<ul class="errorlist"><li>Select a valid choice. That choice is not one of the available choices.</li></ul></li></ul>
  • id
    • 选择一个有效选项。该选项不是可用选项之一。
这似乎表明它不接受针对已删除记录提交的帖子的正确表单ID

有人知道我在这里遗漏了什么吗?或者是更好的方法

如何从表单集中动态删除表单,因为表单的顺序应该是连续的


提前谢谢!!感谢您的帮助。

对于那些偶然发现此问题的人,这可能是一个可行的解决方案 我可以动态地从表单集中删除我的表单,如下所示

因此,最初的html格式如下所示

#form0
<input id="id_formprefix-0-id" type ="hidden "value="something" name="formprefix-0-id">
<input id="id_formprefix-0-field" value="something" type="text" name="formprefix-0-field">
#form1
<input id="id_formprefix-1-id" type ="hidden "value="something" name="formprefix-1-id">
<input id="id_formprefix-1-field" value="something" type="text" name="formprefix-1-field">
#form2
<input id="id_formprefix-2-id" type ="hidden "value="something" name="formprefix-2-id">
<input id="id_formprefix-2-field" value="something" type="text" name="formprefix-2-field">

@amchugh89当时我相信我看过。但是指定您可以通过在post数据中包含
form-#-DELETE
来标记删除。
#form0
<input id="id_formprefix-0-id" type ="hidden "value="something" name="formprefix-0-id">
<input id="id_formprefix-0-field" value="something" type="text" name="formprefix-0-field">
#form1
<input id="id_formprefix-1-id" type ="hidden "value="something" name="formprefix-1-id">
<input id="id_formprefix-1-field" value="something" type="text" name="formprefix-1-field">
#form2
<input id="id_formprefix-2-id" type ="hidden "value="something" name="formprefix-2-id">
<input id="id_formprefix-2-field" value="something" type="text" name="formprefix-2-field">
marked_for_delete = formset.deleted_forms
    for form in formset.forms:
        #Filtering out the deleted records, as the formset will not validate, for deleted records
        # if we use form.instance.id or form.initial['id'] below it does not work. 
        #for some reason it returns the id of the first available record in the data base. 
        #form['id'].value(), gives us the id of the deleted element we are looking for
        if form['id'].value() not in [deleted_record['id'].value() for deleted_record in marked_for_delete]:    
            if form.is_valid():
                pass
                # save the form
            else:
                pass
                # error message