我无法使django-filter
和django-guardian
一起工作。我需要的是一个允许用户列出和筛选她有权查看的所有项目的ItemsFilterView
。以下是我认为与我的代码最相关的部分。我可以根据要求添加更多。
# filters.py
class ItemFilterSet(FilterSet):
class Meta:
model = Item
# views.py
class ItemFilterView(FilterView):
filterset_class = ItemFilterSet
# urls.py
url(r'^items/$', ItemFilterView.as_view(), name='item_list'),
我认为应该使用get_objects_for_user(request.user, 'view_item')
将查询集缩小到仅允许的项目,然后再django-filter
动手,但我找不到正确的位置来添加它。
我找到了添加逻辑的正确位置:
# views.py
class ItemFilterView(FilterView):
filterset_class = ItemFilterSet
def get_queryset(self):
qs = Item.objects.all()
qs = get_objects_for_user(self.request.user, 'view_item', qs)
return qs