如何在 django admin 中启用 change/delete ForeignKey 实体?

How to enable change/delete ForeignKey entity in django admin?

ForeignKey 字段的 Django admin 呈现一个小 "plus" link 允许创建新实体。

而且看起来它也能够为 change/delete 个 ForeignKey 对象

渲染 links

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

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

答案就在代码中 BaseModelAdmin class and the RelatedFieldWidgetWrapper class.

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

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

权限默认为 True,我想如果您更改了它们,您会知道吗?如果确实没有,那么您无法更改相关对象的原因可能是您重写了 readonly_fields attribute in the admin model, or the get_readonly_fields 方法。

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

查看 class RelatedFieldWidgetWrapperdjango/contrib/admin/widgets.py 中的 __init__ 功能:

self.can_delete_related = not multiple and not cascade and can_delete_related