比方說,我有一個網站,用戶可以通過管理面板添加條目。每個用戶都有自己的類別(每個類別都有一個通過ForeingKey/ManyToManyField分配的編輯器)。如何在django admin的changelist_view中過濾queryset?
當用戶添加條目,我用EntryAdmin這樣限制了選擇:
class EntryAdmin(admin.ModelAdmin):
(...)
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == 'category':
if request.user.is_superuser:
kwargs['queryset'] = Category.objects.all()
else:
kwargs['queryset'] = Category.objects.filter(editors=request.user)
return db_field.formfield(**kwargs)
return super(EntryAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
這樣我可以限制哪些用戶可以添加條目類別和它的作品完美。
現在棘手的部分:在條目changelist/action頁面上我只想顯示那些屬於當前用戶的類別的條目。我試圖做到這一點使用這種方法:
def changelist_view(self, request, extra_context=None):
if not request.user.is_superuser:
self.queryset = self.queryset.filter(editors=request.user)
但我得到這個錯誤:
AttributeError: 'function' object has no attribute 'filter'
這是奇怪的,因爲我認爲這應該是一個典型的查詢集。基本上這樣的方法是not well documented和挖掘噸的Django代碼是不是我最喜歡的運動。
任何想法如何實現我的目標?
的查詢集需要按類別進行過濾。但是,當用戶分配了多個類別時會出現問題。或者也許我錯過了一些東西。 – minder 2010-04-11 23:18:30