比方说,我有一个网站,用户可以通过管理面板添加条目。每个用户都有自己的类别(每个类别都有一个通过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