【问题标题】:formset delete inline instanceformset 删除内联实例
【发布时间】:2023-04-04 23:03:01
【问题描述】:

已确定我需要从表单集中删除的对象。

def save_formset(self, request, form, formset, change):
        instances = formset.save(commit=False)
        for instance in instances:
            ......
        if formset.deleted_forms:
            for obj in formset.deleted_forms:
               obj.delete() //here is the issue

它以错误结束

*** AttributeError: 'ActivitiesForm' object has no attribute 'delete'

这就是 formset.deleted_forms 是什么

(Pdb) formset.deleted_forms
[<django.forms.widgets.ActivitiesForm object at 0x7f19f6435f50>]

这里出了什么问题?基本上我正在尝试删除从管理员中选择的内联条目

【问题讨论】:

  • 显然该对象没有delete 方法,但我不确定您到底想要实现什么。
  • 假设您已经上传了一个内联表格内容。你想删除它!当我们覆盖 save_formset() 时。我们如何处理?

标签: django python-2.7 django-models django-forms django-admin


【解决方案1】:

如果您使用的是模型表单集,您应该循环通过deleted_objects,而不是deleted_forms。请参阅the docs 了解更多信息。

for obj in formset.deleted_objects:
    obj.delete()

请注意,在 Django 1.7 (release notes) 之前,您不需要手动删除对象。当您调用 save() 时,对象已被删除,即使使用 commit=False

【讨论】:

  • formset.deleted_objects 不退出 (Pdb) formset.deleted_forms [] (Pdb) formset.deleted_objects *** AttributeError: 'ActivitiesFormFormSet' 对象没有属性 'deleted_objects'
  • 看起来你可能使用的是旧版本的 Django。
  • django 1.7 是我正在使用的
  • 在这种情况下,我不知道您为什么收到AttributeError。希望你能弄清楚。
  • @surfer190 这是不正确的。 The docs 表明 deleted_objectsModelFormSet 的一个功能,它们与管理员无关。
【解决方案2】:

在 Django >=1.11 中,您可以覆盖表单集上的删除:

class YourInlineFormset(BaseInlineFormSet):

    def delete_existing(self, obj, commit=True):
        if commit:
            do_delete_it_your_way()

【讨论】:

    猜你喜欢
    • 2013-05-09
    • 2013-08-06
    • 2010-10-01
    • 2013-03-23
    • 2010-11-19
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多