在 django 管理站点中,如果模型有外键,默认情况下它将是一个选择输入,并且有如下三个链接(编辑、添加、删除)。如何仅为外键禁用这些链接?如果使用 has_delete_permission,它们也不能以自己的更改形式删除。
小智 10
在 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
Run Code Online (Sandbox Code Playgroud)
它不完全是记录在案的功能。此外,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
# formfield.widget.can_add_related = False # can change this, too
# formfield.widget.can_view_related = False # can change this, too
return formfield
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2383 次 |
| 最近记录: |