Python 删除Django admin中的“添加”功能

Python 删除Django admin中的“添加”功能,python,django,admin,Python,Django,Admin,有没有办法删除Django管理站点上的添加功能?对于某些实体,我只希望Django管理员能够查看它们或更改现有的实体,而不是添加新的实体。当然,您可以按照说明对管理进行非常精细的自定义-我相信,您可以通过覆盖ModelAdmin.save\u modelself、request、obj、form、,在您自己的ModelAdmin子类中进行更改,以确保当更改为false(即尝试添加而不是更改)时存储不会发生任何变化,并且部分通过覆盖ModelAdmin.add_viewself、request、f

有没有办法删除Django管理站点上的添加功能?对于某些实体,我只希望Django管理员能够查看它们或更改现有的实体,而不是添加新的实体。

当然,您可以按照说明对管理进行非常精细的自定义-我相信,您可以通过覆盖ModelAdmin.save\u modelself、request、obj、form、,在您自己的ModelAdmin子类中进行更改,以确保当更改为false(即尝试添加而不是更改)时存储不会发生任何变化,并且部分通过覆盖ModelAdmin.add_viewself、request、form_url=,extra_context=None显示一个add视图,让管理员非常清楚,他们不允许通过此路由添加对象。我实际上还没有完成您需要的特定管理定制,但我已经完成了其他定制,它们看起来工作非常顺利

您可以从管理界面中自定义每个用户组的权限:尝试转到/admin/auth/group,从那里开始应该很简单


这不会像前面的答案提供的解决方案那样精细,但它可以满足您的大部分需求,而无需自定义管理员。

如果您更改权限以限制访问,那么您仍然可以通过FK/MtM字段获得加号。单击该按钮将打开一个弹出窗口,其中包含“权限被拒绝”

实际上,您可以通过不向管理员注册模型来完全删除加号


在这种情况下,我有一个预定义的类别,我希望用户能够选择其中的多个类别。最好的方法是使用models.manytomy字段。您可以向管理员注册模型,根据需要输入数据,然后删除注册。

请参阅:了解真正的解决方案。

一个简单有效的方法是为特定内联设置max_num=0。

Satya关于设置max_num=0的建议非常有效

根据ModelForm类上的Django文档:

对于使用支持JavaScript的浏览器的用户,会提供一个Add-other链接,以允许在额外参数提供的内联线之外添加任意数量的其他内联线

如果当前显示的表单数超过max_num,或者用户未启用JavaScript,则不会显示动态链接

与常规表单集一样,您可以使用模型表单集工厂的max_num和额外参数来限制显示的额外表单的数量

max_num不阻止显示现有对象


谢谢你的回答。我希望有一个可以实现这一点的设置,即save_as ModelAdmin属性的工作方式。我不知道在stock Django 1.0中有这样的设置,但可能有一些>1.0和/或contrib hack来提供它-stock 1.0。到目前为止,我一直坚持使用的一些设置主要是因为它在app engine上运行良好,我承认;-。这个答案使事情变得过于复杂。删除usersadd权限对于您描述的情况来说是完美的。这是假设您只需要按模型而不是按实例控制它。@andibak,管理员通常可以编辑用户,因此特别可以更改权限,包括他们自己的权限。在不将ModelAdmin子类化的情况下,你有什么计划来处理这个问题,从而从本质上弥补你所说的过于复杂的答案带来的复杂性?——@krys:你能澄清一下相关用户是否也可能需要管理用户权限吗?这是给后代的:你最初的问题已经由@alex回答了,但是其他人可能会遇到这个问题,并从你的回答中得到一些指导。谢谢但是,由于OP特别想阻止管理员做某些事情,正如问题明确指出的那样,他将如何阻止管理员仅仅撤销权限更改,特别是如果他确实想允许管理员做一些管理;-@亚历克斯:这是真的-我的意思是我的回答比你的回答更简单,但是简单当然有局限性。