【问题标题】:Forms are not getting deleted from formset after is_valid() checkis_valid() 检查后,表单没有从表单集中删除
【发布时间】:2020-02-27 22:39:23
【问题描述】:

我有可以从表单集中动态添加和删除的表单。在前端,我通过选中表单中包含的“删除”复选框来标记删除。 form-0-DELETE 会自动添加到 POST 中。

https://docs.djangoproject.com/en/2.2/topics/forms/formsets/#dealing-with-ordering-and-deletion-of-forms

Deleting form from django formset

def edit(request):
    Formset = formset_factory(EditForm, extra=1, can_delete=True)

    if request.method == 'POST':
        formset =  Formset(request.POST)

        if formset.is_valid():
            cleaned_data = formset.cleaned_data
            print(cleaned_data)


        return render(request, '/edit.html', {'test': 'Post'})

    else:
        formset = Formset()

        return render(request, '/edit.html', {'formset': formset})

这是返回表单集的一部分:

数据:

{u'form-MAX_NUM_FORMS': [u'1000'], u'form-0-test': [u'72'], u'form-0-DELETE': [u'on'], u'form-TOTAL_FORMS': [u'0'], u'form-INITIAL_FORMS': [u'0'], u'form-0-weight': [u'1']}

deleted_forms:

[]

'test' 和 'weight' 是表单中的输入值。您可以在那里看到“form-0-DELETE”。这意味着删除事件已添加到 POST 中,默认值为“on”。我的一个链接说将此值更改为可以评估为 true 的值,将其设置为 True、true 和 1 并没有改变任何内容。

TOTAL-FORMS 正确地为 0,因为我跟踪添加和删除,但我希望 deleted_forms 填充 form-0。当我有超过 0 个表单时,这是一个问题,因为我不知道清理后的数据中会有什么,因为没有记录已删除的表单。

【问题讨论】:

    标签: python django


    【解决方案1】:

    解决方案在前端。 TOTAL_FORMS 是包含已删除表单的绝对总数。通过将其保持在正确的数量,而不是在删除表单时减去 -1,deleted_forms 被正确填充。

    【讨论】:

    • 您介意再详细解释一下吗?我有同样的问题,但我无法弄清楚!谢谢!
    猜你喜欢
    • 2018-11-09
    • 2012-02-08
    • 2012-12-20
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多