【问题标题】:Model Fomset and deletion模型形式集和删除
【发布时间】:2015-04-14 15:15:16
【问题描述】:

我创建了一个modelformset ussign modelformset_factory

formfactory = modelformset_factory(HasJobs, form=HasJobsModelForm, can_delete=True)
formset = modelformset_factory(request.POST or None)

if request.method == "POST":
    form = AccountModelForm(request.POST, instance=account)
    account = form.save()
    for job_form in formset:
        instance = job_form.save(commit=False)
        instance.account = account
        instance.save()

换句话说,我使用每个模型表单创建一个帐户,然后使用表单集中的每个表单创建 HasJob 的每个实例,并在将实例的帐户属性设置为上述保存的帐户后将其保存。但是当我点击模板上formset中每个表单的删除按钮时,表单正常发布但没有删除。这是为什么呢?

编辑:将代码更改为内部 if

account=form.save()
formset.save()

导致删除一个实例,但在创建新实例时不保存

【问题讨论】:

    标签: django modelform formset


    【解决方案1】:

    你可以遍历formset.deleted_forms:

    for form in formset.deleted_forms:
        if form.instance.pk:
            form.instance.delete()
    

    您也可以在cleaned_data 中检查DELETE 键:

    for job_form in formset:
        if job_form.is_valid():
            if job_form.cleaned_data.get('DELETE') and job_form.instance.pk:
                job_form.instance.delete()
            else:
                instance = job_form.save(commit=False)
                instance.account = account
                instance.save()
    

    【讨论】:

    • 不,我使用的是 1.6 django。可以在 1.6 中完成吗?它说 modelformset 在调用 save 时自行处理删除。但它不会删除
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    相关资源
    最近更新 更多