这个问题是How to remove Add button in Django admin, for specific Model?
的延续我已经意识到我的第一个问题没有表现得很好,所以我很难说我开始提出新问题,以解决旧问题。因为已经有了一些答案。
所以问题是如何制作只读视图的Django模型。因此,您无法添加新的,删除旧的,更改当前,但您也没有在Web管理UI上具有该按钮。
第一个问题的解决方案都与字段有关,但与整个模型无关 它们都起作用,因为你无法编辑这些领域,但我不满意他们是如何做到这一点的 目前的解决方案是:
readonly_fields
- >我不喜欢它,因为您可以单击行来更改它,但您无法编辑字段。 editable=False
关于提交的定义 - >这不会在Web管理UI上显示该字段。但是你仍然可以点击行,但你什么都看不到,但仍然有“保存”按钮。 def has_add_permission(self, request):
- >与2相同有什么想法吗?
答案 0 :(得分:3)
您需要将ModelAdmin类的list_display_links
属性设置为(None,)
。但这只能在标准ModelAdmin __init__
调用之后__init__
中完成,否则会在文本ImproperlyConfigured
中抛出... list_display_links[0]' refers to 'None' which is not defined in 'list_display'
异常。你应该定义has_add_permisssion
来隐藏添加按钮:
class AmountOfBooksAdmin(admin.ModelAdmin):
actions = None # disables actions dropbox with delete action
list_display = ('book', 'amount')
def has_add_permission(self, request):
return False
def __init__(self, *args, **kwargs):
super(AmountOfBooksAdmin, self).__init__(*args, **kwargs)
self.list_display_links = (None,)
# to hide change and add buttons on main page:
def get_model_perms(self, request):
return {'view': True}
要从madin管理页面隐藏“查看”和“更改”按钮,您必须将index.html从django / contrib / admin / templates / admin /放到模板dir / admin并更改它:
{% for model in app.models %}
...
{% if model.perms.view %}
<th scope="row"><a href="{{ model.admin_url }}">{{ model.name }}</a></th>
{% else %}
{% if model.admin_url %}
<th scope="row"><a href="{{ model.admin_url }}">{{ model.name }}</a></th>
{% else %}
<th scope="row">{{ model.name }}</th>
{% endif %}
{% endif %}
....