flo*_*urr 3 python django django-rest-framework
我做了一个小端点,适应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
Run Code Online (Sandbox Code Playgroud)
当我MyApi通过URL 调用时,它返回结果没有任何问题,但有时它返回doubled结果!! 这很奇怪......这不是一个系统错误,而只是偶尔发生.
我使用print 'Debug: I am starting...\n\n\n\n'Apache日志中的行来调查问题.当这个加倍发生时,我在日志中读到:
Debug: I am starting...
Debug: I am starting...
Run Code Online (Sandbox Code Playgroud)
好像get_queryset被称为不止一次.这很奇怪.我没有报告该方法中的逻辑细节,我认为问题出在其他地方或者是一个错误......我该如何解决?
您已将其定义queryset为类属性.
class MyApi(viewsets.ReadOnlyModelViewSet):
queryset = []
Run Code Online (Sandbox Code Playgroud)
这意味着每次附加时self.queryset,您都会附加到同一列表中.您的get_queryset方法只调用一次,但self.queryset在方法开头已经有条目.要print 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2815 次 |
| 最近记录: |