Django Rest序列化器的自定义字段顺序?

时间:2014-12-24 13:40:34

标签: python django serialization django-rest-framework

我正在尝试使用Django Rest根据自定义字段的排序返回模型的json表示,该字段未附加到模型,但附加到序列化程序。我知道如何使用模型特定字段执行此操作,但是当字段仅在序列化程序类中时,如何使用django rest返回排序?我想返回一个按'得分'排序的图片列表。谢谢!

------ Views.py

class PicList(generics.ListAPIView):
    queryset = Pic.objects.all()
    serializer_class = PicSerializerBasic
    filter_backends = (filters.OrderingFilter,)
    ordering = ('score')

------ Serializer.py

class PicSerializer(serializers.ModelSerializer):
    userprofile = serializers.StringRelatedField()
    score = serializers.SerializerMethodField()

    class Meta:
        model = Pic
        fields = ('title', 'description', 'image', 'userprofile', 'score')
        order_by = (('title',))

    def get_score(self, obj):
        return Rating.objects.filter(picc=obj).aggregate(Avg('score'))['score__avg']

1 个答案:

答案 0 :(得分:3)

您可以将方法get_score的逻辑移动到class Pic的管理员。 In this answer有一个如何做的例子。

一旦你在经理中拥有它,score字段将成为一个神奇的"可用于class Pic各处的所有对象(序列化程序,视图...),您可以将其用于订购。