我们可以将django排序应用于SerializerMethodField的字段吗

问题描述

我创建了一个方法字段,例如

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这样的网址