这个问题与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错误;显示正常的管理页面,而不是列表中有“数据库错误”)
答案 0 :(得分:3)
您可以尝试使用__in运算符:
qs = Category.objects.filter(editors__in=request.user.groups.all())