1
这个问题连接到my other question但我改变了一下逻辑。Django:复杂的过滤器参数或...?
我有机型是这样的:
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的错误数据库错误;正常管理页面显示出来,而是代替列表中有一项 “数据库错误”)
Ohmigod,那就是诀窍!我用这个:qs = qs.filter(category__in = Category.objects.filter(editors__in = request.user.groups.all()))感谢! – minder 2010-04-12 11:29:55