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