我做了一个小端点,适配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/