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