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