【发布时间】:2011-02-06 22:24:34
【问题描述】:
这个问题与my other question有关,但我稍微改变了逻辑。
我有这样的模型:
from django.contrib.auth.models import Group
class Category(models.Model):
(...)
editors = ForeignKey(Group)
class Entry(models.Model):
(...)
category = ForeignKey(Category)
现在假设用户登录到管理面板并想要更改条目。我如何将条目列表仅限于那些,他有权编辑?我的意思是:如何仅列出分配给“编辑器”字段中具有用户所属组之一的类别的那些条目?
如果用户属于多个组怎么办?我仍然需要显示所有相关条目。
我尝试尝试使用 changelist_view() 和 queryset() 方法,但这个问题对我来说有点太复杂了。
我也想知道granular-permissions 是否可以帮助我完成这项任务,但目前我不知道。
我只是想出了这个:首先我得到了用户所属的所有组的列表。然后对于每个组,我得到所有连接的类别,然后对于每个类别,我得到属于这些类别的所有条目。不幸的是,我不知道如何将所有内容作为 filter() 参数拼接在一起以生成一个不错的单个 QuerySet。
编辑:
我尝试像这样使用MultiQuerySet:
class EntryAdmin(admin.ModelAdmin):
(...)
def queryset(self, request):
qs = super(EntryAdmin, self).queryset(request)
if not request.user.is_superuser:
groups = request.user.groups.all()
list = []
for group in groups:
categories = Category.objects.filter(editors=group)
for category in categories:
results = qs.filter(category=category)
list.append(results)
qs = MultiQuerySet(*list)
return qs
但我在管理视图中收到一个数据库错误(不是 Django 错误;显示的是正常管理页面,但不是列表而是“数据库错误”)
【问题讨论】:
标签: django django-admin django-queryset