我有这个api视图
class ItemList(generics.ListCreateAPIView):
model = Item
def get_queryset(self):
return get_objects_for_user('item_view',self.request.user)
和另一个应用视图(不属于API)
def item_search(request):
qs = get_objects_for_user('item_view',request.user)
q = request.GET.get('q',None)
qs.filter ( ... )
paginator = Paginator(qs['queryset'], 20)
..
在常规视图中使用API视图中get_queryset
的最佳方法是什么?
我有一些权限\过滤正在进行,我希望尽可能将视图保持为DRY。
我已经在代码中查看并看到通用视图已经用ItemList.initizlie(request)
实例化了,但我仍然在那里磕磕绊绊地让我认为这可能不是解决方案......
编辑:
我到目前为止最接近的是ItemList.as_view()(request)
- 它返回数据,但仍然不够,我需要QS,所以我可以对它应用额外的过滤。
答案 0 :(得分:0)
Django-Rest-Framework视图基于Django基于类的视图。除此之外,选择的方法名称与Django通用视图中的相同。
我想说最好的方法是构建一个在API视图和“普通”视图中使用的mixin。这个mixin可以提供get_queryset
(和其他人)。如果你保持名称的标准,那么真正的视图将非常小,并且大多数逻辑将在你的mixin中。