假设我的Bar
模型带有owner
字段。我希望用户能够编辑obj.owner == request.user
。
模型在超级用户和我明确分配了权限change_bar
或add_bar
的用户的管理面板中正确显示,如here所述:
假设您有一个app_label foo和模型的应用程序 名为Bar,用于测试您应该使用的基本权限:
add: user.has_perm('foo.add_bar') change: user.has_perm('foo.change_bar') delete: user.has_perm('foo.delete_bar')
如何在未向用户明确分配Bar
或foo.change_bar
的情况下在管理员索引列表中显示模型foo.add_bar
?
到目前为止,我尝试了以下操作,期望Bar
模型出现在索引列表页面中,但它不起作用。
class BarAdmin(admin.ModelAdmin):
def get_queryset(self, request):
qs = super(BarAdmin, self).get_queryset(request)
if request.user.is_superuser:
return qs
return qs.filter(owner=request.user)
def has_add_permission(self, request):
return True
def has_change_permission(self, request, obj=None):
if obj is None:
return True
if obj.owner == request.user:
return True
return False
def has_delete_permission(self, request, obj=None):
if obj is None:
return True
if obj.owner == request.user:
return True
return False
def has_module_permission(self, request):
return True
访问链接admin/foo/bar/
并返回Bar
个实例的列表,obj.owner == request.user
和admin/foo/bar/add
允许用户添加新对象。
这些链接虽然未显示在管理员索引页面中。
admin/foo/
会返回403 Forbidden
。
我正在使用Django 1.7。 适用于Django 1.8。