Python Django Admin-禁用';添加';针对特定模型的操作
我有一个django网站,有很多模型和表单。我有许多自定义表单和表单集、InlineFormset、自定义验证和自定义查询集。因此,addmodel操作取决于需要其他东西的表单,而django管理中的“addmodel”是通过自定义查询集的500完成的 对于某些型号,是否仍有禁用“添加$MODEL”功能的方法 我希望Python Django Admin-禁用';添加';针对特定模型的操作,python,django,django-admin,Python,Django,Django Admin,我有一个django网站,有很多模型和表单。我有许多自定义表单和表单集、InlineFormset、自定义验证和自定义查询集。因此,addmodel操作取决于需要其他东西的表单,而django管理中的“addmodel”是通过自定义查询集的500完成的 对于某些型号,是否仍有禁用“添加$MODEL”功能的方法 我希望/admin/appname/modelname/add/给出404(或适当的“走开”错误消息),我不希望“add$modelname”按钮处于/admin/appname/mode
/admin/appname/modelname/add/
给出404(或适当的“走开”错误消息),我不希望“add$modelname”按钮处于/admin/appname/modelname
视图中
Django admin提供了一种禁用管理操作的方法(http://docs.djangoproject.com/en/dev/ref/contrib/admin/actions/#disabling-操作)但是,此模型的唯一操作是“删除选定项”。i、 e.管理操作仅作用于现有模型。有什么django风格的方法可以做到这一点吗?这很简单,只需重载
在Admin
类中有\u add\u权限
方法,如下所示:
class MyAdmin(admin.ModelAdmin):
def has_add_permission(self, request, obj=None):
return False
默认情况下,syncdb为每个型号创建3个安全权限:
然后,作为该组成员的任何登录用户都将没有“创建”权限,屏幕上将不会显示任何与此相关的内容。这是一个延迟太多的回答;只是张贴这个,好像有人正在寻找相同的解决方案 在admin.py文件中,可以执行以下操作:
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
fields = '__all__'
class MyModelAdmin(admin.ModelAdmin):
form = QuestionTrackAdminForm
list_display = ['title', 'weight']
readonly_fields = ['title', 'weight']
admin.site.register(MyModel, MyModelAdmin)
在这里,“只读字段”发挥了神奇的作用。谢谢。我想这会对你有所帮助。。 下面的代码必须在admin.py文件中
@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
list_display = ('name', )
list_filter = ('name', )
search_fields = ('name', )
list_per_page = 20
# This will help you to disbale add functionality
def has_add_permission(self, request):
return False
# This will help you to disable delete functionaliyt
def has_delete_permission(self, request, obj=None):
return False
除上述内容外,由
# This will help you to disable change functionality
def has_change_permission(self, request, obj=None):
return False
只需从另一个答案中复制代码即可
管理中的#
#使相关字段无法添加
def get_表单(自我、请求、obj=None、**kwargs):
form=super().get_form(请求、对象、**kwargs)
form.base\u fields['service'].widget.can\u add\u related=False
报税表
在我的例子中,我使用内联
#在内联表单集中,例如admin.TabularInline
#禁用所有
def get_formset(self、request、obj=None、**kwargs):
formset=super().get_formset(请求、对象、**kwargs)
service=formset.form.base_字段['service']
service.widget.can\u add\u related=service.widget.can\u change\u related=service.widget.can\u delete\u related=False
返回表单集
在service=formset.form.base_字段['service']
基本字段
是模型中定义的字段
如果在表格中定义,请使用:
product=formset.form.declared_字段['product']
django admin中的“操作”是在changelist视图中应用于列表中所有选中行的下拉列表。相关(但不同)问题:这对我不起作用。“添加模型”按钮仍然显示在模型的变更列表页面上。这里的MyAdmin是什么?别忘了注册MyAdmin,比如:
admin.site.register(MyModel,MyModelAdmin)
将所有内容添加到模型应用文件夹的admin.py
。这正是我如此喜欢Python和Django的原因。简单。工作得很好。非常感谢。在Django 1.11工作。不需要obj
参数。这不会阻止“添加”按钮出现。此解决方案只会在表单上禁用标题和权重字段。它不会阻止创建一个新的MyModelAdmin对象,这是我相信OP所要求的。是的,base_字段
和declared_字段
是我从这个案例中学到的最重要的发现。这适用于2.2。还将删除超级用户的“添加”和“删除”按钮。正是我需要的。谢谢!在3.2中工作