gpt4 book ai didi

python - Django REST 框架 : overriding get_queryset() sometimes returns a doubled queryset

转载 作者:太空宇宙 更新时间:2023-11-03 13:40:44 26 4
gpt4 key购买 nike

我做了一个小端点,适配DRF ReadOnlyModelViewSet,定义如下:

class MyApi(viewsets.ReadOnlyModelViewSet):

queryset = []
serializer_class = MySerializer

def get_queryset(self):
print 'Debug: I am starting...\n\n\n\n'
# do a lot of things filtering data from Django models by some information on neo4j and saving data in the queryset...
return self.queryset

当我通过 URL 调用 MyApi 时,它返回的结果没有任何问题,但有时它会返回双倍的结果!!很奇怪...这不是系统错误,只是偶尔会发生。

我使用 Apache 日志中的行 print 'Debug: I am starting...\n\n\n\n' 来调查问题。当发生翻倍时,我在日志中读到:

Debug: I am starting...




Debug: I am starting...

get_queryset 似乎被调用了不止一次。这很奇怪。我没有报告该方法内部的逻辑细节,我认为问题出在其他地方或者是错误...我该如何解决?

最佳答案

您已将 queryset 定义为类属性。

class MyApi(viewsets.ReadOnlyModelViewSet):
queryset = []

这意味着每次您追加到 self.queryset 时,您都追加到同一个列表。您的 get_queryset 方法仅被调用一次,但 self.queryset 在该方法的开头已经有条目。要查看实际问题,请在开始时在您的方法中打印 self.queryset,然后再进行更改。

你最好这样做:

class MyApi(viewsets.ReadOnlyModelViewSet):
queryset = None # this line is probably not required, but some code checking tools like it to be defined.

def get_queryset(self):
self.queryset = []
...
return self.queryset

关于python - Django REST 框架 : overriding get_queryset() sometimes returns a doubled queryset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31809447/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com