在 list_display 中的字段时隐藏 Django 管理 table 中的 edit/add/remove 按钮

Hide edit/add/remove buttons in Django admin table when field in list_display

我想在 Django 管理工具中隐藏外键字段的编辑、添加和删除图标。

有可能实现吗?如果是,怎么做?

到目前为止,这是我的代码:

@admin.register(Request)
class RequestAdmin(admin.ModelAdmin):
    list_display = (
        "name",
        "contact_method",
        "neighborhood",
        "adults",
        "children",
        "prescriptions",
        "volunteer",
        "status",
        "due_date",
    )
    list_editable = ("status", "volunteer")

    def neighborhood(self, obj):
        if obj.address and obj.address.get("neighborhood", False):
            neighborhood = obj.address["neighborhood"]
            if obj.address.get("details", False):
                return f"{neighborhood} - {obj.address['details']}"
            return neighborhood

看来问题是我也注册了另一个型号Volunteer

@admin.register(Volunteer)
class VolunteerAdmin(admin.ModelAdmin):
    list_display = ("name", "contact_method", "neighborhood", "valid_ID")

    def neighborhood(self, obj):
        if obj.address and obj.address.get("neighborhood", False):
            return obj.address["neighborhood"]

不过,我也需要保留这个模型。那么,我该如何实现呢?

我能够通过在内部 class Media:

中指定文件,为 RequestAdmin 使用自定义 CSS 来隐藏这些图标
@admin.register(Request)
class RequestAdmin(admin.ModelAdmin):
    list_display = (
        "name",
        "contact_method",
        "neighborhood",
        "adults",
        "children",
        "prescriptions",
        "volunteer",
        "status",
        "due_date",
    )
    list_editable = ("status", "volunteer")

    def neighborhood(self, obj):
        if obj.address and obj.address.get("neighborhood", False):
            neighborhood = obj.address["neighborhood"]
            if obj.address.get("details", False):
                return f"{neighborhood} - {obj.address['details']}"
            return neighborhood

    # This is required to use custom extra CSS
    class Media:
        css = {"all": ("volunteering/css/style.css",)}

volunteering/static/volunteering/css/style.css内容如下:

.related-widget-wrapper-link {
    display: none;
}

应用的结构如下:

table 现在是这样显示的: