django管理员:如何禁用外键的编辑和删除链接

时间:2019-06-02 07:37:44

标签: python django

在django管理站点中,如果模型具有外键,则默认情况下它将是选择输入,并且具有如下所示的三个链接(编辑,添加,删除)。 如何仅对外键禁用这些链接? 如果使用has_delete_permission,则也无法以自己的更改形式将其删除。

默认值: default

预期: after

3 个答案:

答案 0 :(得分:3)

在admin.py中的

在模型ModelAdmin类下创建一个def。选择与foreign_key字段相关的“添加,更改或删除”选项,将想要隐藏和删除的选项(或将布尔值从“ False”更改为“ True”)保留为想要显示的选项:

class YourModelAdmin(admin.ModelAdmin):
    ...
    def get_form(self, request, obj=None, **kwargs):
        form = super(YourModelAdmin, self).get_form(request, obj, **kwargs)
        field = form.base_fields["your_foreign_key_field"]
        field.widget.can_add_related = False
        field.widget.can_change_related = False
        field.widget.can_delete_related = False
        return form

答案 1 :(得分:0)

def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['xxx'].widget.can_delete_related = False

答案 2 :(得分:0)

这不是完全记录的功能。此外,formfield_for_dbfield简直是一团糟(就像大多数django.contrib.admin一样)。但这是我发现的最干净的方法,对我来说很好。

class MyAdmin(django.contrib.admin.ModelAdmin):

    def formfield_for_dbfield(self, *args, **kwargs):
        formfield = super().formfield_for_dbfield(*args, **kwargs)

        formfield.widget.can_delete_related = False
        formfield.widget.can_change_related = False

        return formfield