删除 Django admin 中的“添加”功能 [重复]
Posted
技术标签:
【中文标题】删除 Django admin 中的“添加”功能 [重复]【英文标题】:Remove the "Add" functionality in Django admin [duplicate] 【发布时间】:2010-11-16 02:48:23 【问题描述】:有没有办法删除 Django 管理站点上的“添加”功能?对于某些实体,我只希望 Django 管理员能够查看它们或更改现有实体,但不能添加新实体。
【问题讨论】:
【参考方案1】:当然,您可以按照here 的说明非常精细地自定义管理——我相信您可以通过在您自己的ModelAdmin
子类中覆盖ModelAdmin.save_model(self, request, obj, form, change)
来部分获得您想要的东西,以确保在当change
为假时存储(即尝试添加而不是更改),部分通过覆盖ModelAdmin.add_view(self, request, form_url='', extra_context=None)
以显示“添加视图”,让管理员非常清楚他们不会被允许通过此路线添加对象。我实际上并没有完成您需要的特定管理自定义,但我已经完成了其他一些,它们似乎运行得非常顺利!
【讨论】:
感谢您的回答。我希望有一个可以实现这一点的设置,即 save_as ModelAdmin 属性的工作方式。 我不知道库存 Django 1.0 中有这样的设置,但也许有一些 >1.0 和/或 contrib hack 来提供它——库存 1.0.something 是我迄今为止坚持的(我承认,主要是因为它在应用引擎上运行良好;-)。 这个答案使事情变得过于复杂。删除用户添加权限非常适合您描述的情况。 (假设您只需要按模型而不是按实例来控制它。) @andibak,管理员通常可以编辑用户,因此尤其可以更改权限,包括他们自己的权限。你有什么计划来处理这个问题,而不是继承 ModelAdmin 并因此基本上等于你声称的复杂性是我过于复杂的答案?-) @krys:您能否澄清相关用户是否也可能需要管理用户权限?这是为了后代:@alex 已经回答了您最初的问题,但其他人可能会遇到这个问题并从您的回答中获得一些指导。谢谢!【参考方案2】:您可以在管理界面中自定义每个用户组的权限:尝试转到/admin/auth/group
,从那里应该很简单。
这不会像先前答案提供的解决方案那样精细,但它可以满足您的大部分需求,而无需自定义管理员。
【讨论】:
但是由于 OP 特别想阻止 管理员 做某些事情,正如问题如此清楚地指出的那样,他将如何阻止管理员撤消权限更改(尤其是如果他确实想允许管理员进行一些管理;-)? @Alex:这是真的——我的意思是我的回复是您回复的更简单的替代方案,但简单当然也有局限性。【参考方案3】:如果您更改权限以限制访问,那么您仍会通过 FK/MtM 字段获得加号。单击该按钮将打开一个弹出窗口,其中包含“Permission Denied”。
您实际上可以完全删除加号,而不仅仅是不向管理员注册模型。
我有一个预定义的类别,我希望用户能够选择多个类别。最好的方法是使用 models.ManyToMany 字段。您可以向管理员注册模型,按要求输入数据,然后删除注册。
【讨论】:
【参考方案4】:请参阅:Django Admin - Disable the 'Add' action for a specific model 以获得真正的解决方案。
【讨论】:
【参考方案5】:一种简单有效的方法是为该特定内联设置max_num=0
。
【讨论】:
【参考方案6】:Satya 设置 max_num=0 的建议非常有效。
根据 ModelForm 类上的 Django 文档:
对于使用启用 javascript 的浏览器的用户,提供了一个“添加另一个”链接,以允许添加任意数量的附加内联,除了作为额外参数提供的那些。
如果当前显示的表单数量超过 max_num,或者用户没有启用 JavaScript,则不会出现动态链接。
和
与常规表单集一样,您可以对 modelformset_factory 使用 max_num 和 extra 参数来限制显示的额外表单的数量。
max_num 不会阻止显示现有对象
【讨论】:
以上是关于删除 Django admin 中的“添加”功能 [重复]的主要内容,如果未能解决你的问题,请参考以下文章