【问题标题】:context variables in DRF generic viewDRF 通用视图中的上下文变量
【发布时间】:2020-02-22 03:36:38
【问题描述】:

我正在尝试在 DRF 中构建一些前端的东西 - 反应。 someAPI 应该使用当前记录的用户 ID 作为参数对 db 运行查询。经过几个小时在这里和那里尝试后,以下代码可以工作,但我不确定是否是正确的方法,因为涉及使用 mixins 和函数覆盖。

问题是,如何使用通用 DRF 视图获得相同的结果?

class someAPI(mixins.ListModelMixin,
              generics.GenericAPIView):

serializer_class = someSerializer

def get(self, request, *args, **kwargs):
    customRole = get_object_or_404(Role, user=request.user)
    self.queryset = ClassDependingOnRole.objects.filter(role=customRole.id)
    return self.list(request, *args, **kwargs) 

def post(self, request, *args, **kwargs):
    return self.create(request, *args, **kwargs)

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    可以直接使用ListCreateAPIView,比较好用。

    class SomeApi(generics.ListCreateAPIView):
        serializer_class = SomeSerializer    
    
        def get_queryset(self):
            role=get_object_404(Role, user=self.request.user)
            return ClassDependingOnRole.objects.filter(role=role)
    

    它会自动生成 post 和 get 方法并验证序列化程序验证。您可以从here 找到有关 ListCreateAPIView 的更多详细信息。

    【讨论】:

    • 谢谢!已经尝试使用get_queryset,但没有工作,因为默认情况下不接受request 作为参数,这意味着request.user返回None。我担心上下文变量会发生这种情况。这就是为什么我确实覆盖了get(self, request,...) 而不是get_queryset(self) 这个假设我错了吗?
    • 我做错了,不是request.user,一定是self.request.user。我改了。而且我不懂上下文变量,你能告诉我吗?
    • 是的@kamilyrb 你说得对。使用您的最新编辑它可以工作。看起来我必须更深入地查看文档,因为通用视图本身具有请求属性。泰!
    猜你喜欢
    • 2021-06-27
    • 1970-01-01
    • 2016-01-15
    • 2016-12-29
    • 1970-01-01
    • 2012-02-12
    • 2020-10-26
    • 1970-01-01
    • 2013-01-26
    相关资源
    最近更新 更多