在Django管理界面中移除“添加另一个”
每当我在编辑对象A时,它有一个指向对象B的外键,旁边总会出现一个“添加另一个”的选项。请问我怎么才能去掉这个选项呢?
我已经设置了一个用户,没有权限去添加对象B。虽然那个加号还是显示着,但我点击后却弹出“权限被拒绝”的提示。这看起来很糟糕。
我使用的是Django 1.0.2。
12 个回答
虽然这里提到的大部分解决方案都能奏效,但还有一种更简单的方法。这个方法可能是在Django的后续版本中引入的,早期的解决方案出现时还没有这个方法。(我现在使用的是Django 1.7)
如果你想去掉“添加另一个”这个选项,
class ... #(Your inline class)
def has_add_permission(self, request):
return False
如果你还想禁用“删除?”这个选项,可以在Inline类中添加以下方法。
def has_delete_permission(self, request, obj=None):
return False
以下的回答是我最初的回答,但它是错误的,并没有回答提问者的问题:
更简单的解决方案,不需要使用CSS技巧,也不需要修改Django的代码:
把这个加到你的Inline类里面:
max_num=0
(这只适用于内联表单,不适用于提问者问的外键字段)
上面的回答只对隐藏内联表单的“添加相关”按钮有用,而不适用于提问者要求的外键。
我写这个回答的时候,如果没记错的话,接受的答案是同时隐藏了这两个按钮,这也是我感到困惑的原因。
接下来这个链接似乎提供了一个解决方案(虽然使用CSS隐藏按钮似乎是最可行的,特别是当外键的“添加另一个”按钮在内联表单中时):
过时的回答
Django 现在已经可以做到这一点了。
你有没有想过用 CSS 来直接隐藏这个按钮?也许这样做有点不太正规。
这个方法还没有经过测试,但我在想……
no-addanother-button.css
#_addanother { display: none }
admin.py
class YourAdmin(admin.ModelAdmin):
# ...
class Media:
# edit this path to wherever
css = { 'all' : ('css/no-addanother-button.css',) }
Django 的文档中有关于如何做到这一点的说明 -- 作为静态定义的媒体
注意/编辑:文档中提到这些文件会加上 MEDIA_URL,但我在实验中发现并没有。你的情况可能会有所不同。
如果你发现也是这样,有一个快速的解决办法……
class YourAdmin(admin.ModelAdmin):
# ...
class Media:
from django.conf import settings
media_url = getattr(settings, 'MEDIA_URL', '/media/')
# edit this path to wherever
css = { 'all' : (media_url+'css/no-addanother-button.css',) }