如何从常规视图使用django REST视图

时间:2014-07-03 06:09:25

标签: django django-rest-framework

我有这个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,所以我可以对它应用额外的过滤。

1 个答案:

答案 0 :(得分:0)

Django-Rest-Framework视图基于Django基于类的视图。除此之外,选择的方法名称与Django通用视图中的相同。

我想说最好的方法是构建一个在API视图和“普通”视图中使用的mixin。这个mixin可以提供get_queryset(和其他人)。如果你保持名称的标准,那么真正的视图将非常小,并且大多数逻辑将在你的mixin中。