【发布时间】:2016-02-03 11:41:04
【问题描述】:
外键字段的 Django 管理员呈现一个小的“加号”链接,允许创建新实体。
而且看起来它还能够为更改/删除 ForeignKey 对象呈现链接
但文档中没有示例显示如何使此功能可用。是否有任何未记录的选项?
【问题讨论】:
-
我使用 django 1.8.4 。当我使用超级用户登录时,我看到添加和编辑链接,但删除是不可见的。
标签: python django django-admin
外键字段的 Django 管理员呈现一个小的“加号”链接,允许创建新实体。
而且看起来它还能够为更改/删除 ForeignKey 对象呈现链接
但文档中没有示例显示如何使此功能可用。是否有任何未记录的选项?
【问题讨论】:
标签: python django django-admin
答案就在BaseModelAdmin类和RelatedFieldWidgetWrapper类的代码中。
在BaseModelAdmin中,首先保证用户有权限添加、更改或删除相关模型的对象。
在RelatedFieldWidgetWrapper 中,要更改或删除相关对象,还要确保该关系不是多对多的。此外,如果为该关系启用级联删除,则无法删除相关对象。
默认情况下权限为 True,我假设您会知道是否更改了它们?如果确实没有,那么您无法更改相关对象的原因可能是您覆盖了管理模型中的readonly_fields 属性或get_readonly_fields 方法。
一旦您看到更改按钮,您可能还看不到删除按钮,因为级联是默认设置。您可以通过在创建外键时设置on_delete 属性来更改此设置。
【讨论】:
on_delete ForeignKey 字段选项的要求。
查看django/contrib/admin/widgets.py中RelatedFieldWidgetWrapper类的__init__函数:
self.can_delete_related = not multiple and not cascade and can_delete_related
【讨论】: