我正在尝试使用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']
答案 0 :(得分:3)
您可以将方法get_score
的逻辑移动到class Pic
的管理员。 In this answer有一个如何做的例子。
一旦你在经理中拥有它,score
字段将成为一个神奇的"可用于class Pic
各处的所有对象(序列化程序,视图...),您可以将其用于订购。