有没有办法删除 Django 管理站点上的“添加”功能?对于某些实体,我只希望 Django 管理员能够查看它们或更改现有实体,但不能添加新实体。
6 回答
请参阅:Django Admin - 禁用特定模型的“添加”操作以获得真正的解决方案。
当然,您可以按照此处的说明非常精细地自定义管理- 我相信您想要的部分可以通过覆盖ModelAdmin.save_model(self, request, obj, form, change)
您自己的ModelAdmin
子类来获得,以确保在change
为 false 时商店不会发生任何事情(即尝试添加而不是而不是更改),并且部分通过覆盖ModelAdmin.add_view(self, request, form_url='', extra_context=None)
显示“添加视图”,使管理员非常清楚他们不会被允许通过此路由添加对象。我实际上并没有完成您需要的特定管理自定义,但我已经完成了其他人,他们似乎工作得非常顺利!
您可以从管理界面中自定义每个用户组的权限:尝试去,/admin/auth/group
从那里应该很简单。
这不会像早期答案提供的解决方案那样精细,但它可以满足您的大部分需求,而无需自定义管理员。
如果您更改权限以限制访问,那么您仍然会通过 FK/MtM 字段获得加号。单击该按钮将打开一个弹出窗口,其中包含“权限被拒绝”。
实际上,您可以通过不向管理员注册模型来完全删除加号。
我有一种情况,我有预定义的类别,我希望用户能够选择多个类别。最好的方法是使用 models.ManyToMany 字段。您可以向管理员注册模型,根据需要输入数据,然后删除注册。
一种简单有效的方法是max_num=0
为该特定内联设置。
Satya 设置 max_num=0 的建议非常有效。
根据 ModelForm 类的 Django 文档:
对于使用支持 JavaScript 的浏览器的用户,提供了一个“添加另一个”链接,以允许添加任何数量的附加内联,除了作为额外参数提供的那些。
如果当前显示的表单数量超过 max_num,或者用户没有启用 JavaScript,则不会出现动态链接。
和
与常规表单集一样,您可以对 modelformset_factory 使用 max_num 和 extra 参数来限制显示的额外表单的数量。
max_num 不会阻止显示现有对象