formset 删除内联实例
Posted
技术标签:
【中文标题】formset 删除内联实例【英文标题】:formset delete inline instance 【发布时间】:2016-08-04 03:28:28 【问题描述】:已确定我需要从表单集中删除的对象。
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() 时。我们如何处理?
【参考方案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 不退出AttributeError
。希望你能弄清楚。
@surfer190 这是不正确的。 The docs 表明 deleted_objects
是 ModelFormSet
的一个功能,它们与管理员无关。【参考方案2】:
在 Django >=1.11 中,您可以覆盖表单集上的删除:
class YourInlineFormset(BaseInlineFormSet):
def delete_existing(self, obj, commit=True):
if commit:
do_delete_it_your_way()
【讨论】:
以上是关于formset 删除内联实例的主要内容,如果未能解决你的问题,请参考以下文章
Django - 基数为 10 的 int() 的 Formset 无效文字:''