1

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动手,但我找不到合适的位置来添加它。

4

1 回答 1

1

我找到了添加逻辑的正确位置:

# 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
于 2013-10-25T15:01:32.077 回答