【问题标题】:Django Rest Order on custom field from serializer?来自序列化程序的自定义字段上的Django Rest Order?
【发布时间】:2023-04-10 19:17:01
【问题描述】:

我正在尝试使用 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']

【问题讨论】:

    标签: python django serialization django-rest-framework


    【解决方案1】:

    您可以将方法get_score 的逻辑移至class Pic 的管理器。 In this answer有一个例子说明如何做到这一点。

    一旦你在管理器中拥有它,score 字段将变得“神奇地”可用于class Pic 的每个对象(序列化程序,视图......),你将能够使用它来订购.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多