这个问题是如何删除Django管理中的Add按钮的延续,针对特定的Model?
我意识到我的第一个问题表述得不好,所以我坚持认为最好开始新问题,而不是修复旧问题。因为已经有了一些答案。
所以问题是如何使Django模型成为只读视图。这样你就不能添加新的、删除旧的、更改当前的,但你也没有在web管理UI上的按钮。
第一个问题的解决方案都和领域有关,但和整个模型无关
它们都能工作,从某种意义上说,你将无法编辑这些字段,但我对它们的工作方式不满意。
目前的解决方案是:
- 对模型中的所有字段使用
readonly_fields
->我不喜欢它,因为您可以单击行来更改它,但不能编辑字段 - 字段定义上的
editable=False
->这不会在web管理UI上显示字段。但你们仍然可以点击行,但你们不会看到任何东西,并且仍然有保存按钮 def has_add_permission(self, request):
->与2相同- 不要向任何人授予此模型的添加权限->与2相同
有什么想法吗?
您需要将ModelAdmin类的list_display_links
属性设置为(None,)
。但这只能在标准ModelAdmin __init__
调用后的__init__
中完成,否则它将抛出带有文本... list_display_links[0]' refers to 'None' which is not defined in 'list_display'
的ImproperlyConfigured
异常。无论如何,您都应该定义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管理页面隐藏"查看"one_answers"更改"按钮,您必须将index.html从django/contrib/admin/templates/admin/放置到templates-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 %}
....