问题描述
matchCount= serializers.SerializerMethodField('get_match')
def get_match(self,obj):
likes = obj.post.count
#here will be logic of almost 120 lines so cant use annotate*
return likes / time if time > 0 else likes
现在,我要根据提交的 matchCount 进行订购。在这种情况下最好的解决方案是什么?直到现在,我发现其他开发人员正在使用注释等,但是由于此逻辑是动态的,并且会在运行时进行匹配计数,因此我可以根据该字段进行排序吗?
注意::如果你们对此建议有更好的解决方案,我们将不胜感激
解决方法
在标准DRF中,我在序列化程序文档的任何地方都找不到它。
但是,如果您使用this library,则可以在查询字符串中指定要进行排序的字段。
编辑:
如果使用上述库,则必须按照自述文件中的说明将ModelSerializer更改为DynamicModelSerializer,将ModelViewSet更改为DynamicModelViewSet,将Router更改为DynamicRouter,等等。
然后,您应该可以使用GET /yourendpoint/?sort[]=matchCount
这样的网址