【问题标题】:How to enable change/delete ForeignKey entity in django admin?如何在 django admin 中启用更改/删除 ForeignKey 实体?
【发布时间】:2016-02-03 11:41:04
【问题描述】:

外键字段的 Django 管理员呈现一个小的“加号”链接,允许创建新实体。

而且看起来它还能够为更改/删除 ForeignKey 对象呈现链接

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

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

【问题讨论】:

  • 我使用 django 1.8.4 。当我使用超级用户登录时,我看到添加和编辑链接,但删除是不可见的。

标签: python django django-admin


【解决方案1】:

答案就在BaseModelAdmin类和RelatedFieldWidgetWrapper类的代码中。

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

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

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

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

【讨论】:

  • 谢谢,我错过了on_delete ForeignKey 字段选项的要求。
【解决方案2】:

查看django/contrib/admin/widgets.pyRelatedFieldWidgetWrapper类的__init__函数:

self.can_delete_related = not multiple and not cascade and can_delete_related

【讨论】:

    猜你喜欢
    • 2011-10-13
    • 2017-01-22
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    相关资源
    最近更新 更多