我有一个序列化程序,它有一个受欢迎的方法域,例如它返回一个特定的浮点数。有没有办法通过serializermethodfield订购?
代码段:
serializers.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')
答案 0 :(得分:0)
过滤后端基于更改查询集。所以它们只适用于数据库中的字段,而不适用于计算字段。
所以你看到两种可能性:
将流行度放入数据库,在保存Post
或其他数据所依赖的数据更改时更新它。
自己对结果进行排序。只需覆盖视图集中的list
,自己阅读ordering-argument并对从父级调用list
得到的结果进行排序。