gpt4 book ai didi

python - 按 MethodSerializer 排序

转载 作者:行者123 更新时间:2023-12-05 07:58:37 25 4
gpt4 key购买 nike

我有一个序列化程序,它有一个流行的方法字段,例如它返回一个特定的 float 。有没有办法通过 serializermethodfield 进行排序?

代码片段:

序列化器.py

class PostListSerializer(serializers.HyperlinkedModelSerializer):
popular = serializers.SerializerMethodField('popularity')

def popularity(self, obj):
time = datetime.datetime.now()
n = obj.created.replace(tzinfo=None)
r = time.replace(tzinfo=None)
x = r - n
a = float(str(x.total_seconds()//(60*60*24)))
view = obj.post.count()
return view / a

views.py

class PopularPostsSet(viewsets.ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostListSerializer
filter_backends = (filters.OrderingFilter,)
ordering_fields = ('popular')

最佳答案

过滤器后端基于更改查询集。所以它们只适用于数据库中的字段,而不适用于计算字段。

所以你我看到两种可能:

  • 将流行度存入数据库,在保存Post或其他数量依赖的数据变化时更新。

  • 自己对结果进行排序。只需覆盖 View 集中的 list,自己阅读排序参数,并对从父级调用 list 获得的结果进行排序。

关于python - 按 MethodSerializer 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24269433/

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