如何在django admin中启用更改/删除ForeignKey实体?

时间:2015-11-03 10:45:17

标签: python django django-admin

对于ForeignKey字段的Django管理员呈现一个小的"加"允许创建新实体的链接。

enter image description here

看起来它也能够呈现更改/删除ForeignKey对象的链接

https://github.com/django/django/blob/1.8/django/contrib/admin/templates/admin/related_widget_wrapper.html#L13

但文档中没有示例显示如何使此功能可用。是否有任何未记录的选项?

2 个答案:

答案 0 :(得分:2)

答案在于BaseModelAdmin类和RelatedFieldWidgetWrapper类的代码。

BaseModelAdmin中,首先确保用户有权添加,更改或删除相关模型的对象。

RelatedFieldWidgetWrapper中,要更改或删除相关对象,还要确保关系不是多对多关系。此外,如果为此关系启用了级联删除,则无法删除相关对象。

默认情况下,权限为True,我假设您知道是否更改过它们?如果确实没有,那么您无法更改相关对象的原因可能是您覆盖了管理模型中的readonly_fields属性或get_readonly_fields方法。

一旦您看到更改按钮,您可能还没有看到删除按钮,因为级联是默认值。您可以通过在创建外键时设置on_delete属性来更改此设置。

答案 1 :(得分:2)

查看__init__中的RelatedFieldWidgetWrapperdjango/contrib/admin/widgets.py函数:

self.can_delete_related = not multiple and not cascade and can_delete_related