在Django模型序列化器中,典型的使用情况如下所示
class SalesManSerializer(serializers.ModelSerializer):
class Meta:
module = models.SalesMan
fields = ('id', 'name')
id,名字全都来自salse man模型。
但是,如果我有另一个模型称为Order,它引用了SalseMan。我想查询每个销售员获得多少订单。
SQL就像
SELECT ID, NAME, COUNT(ORDER.ID) FROM SALSE_MAN, ORDER WHERE ORDER.UID = SALSE_MAN.ID GROUP BY SALSE_MAN.ID
如何序列化此查询?
答案 0 :(得分:2)
模型序列化程序默认情况下仅序列化模型字段。但是好消息是,您始终可以将自定义字段添加到序列化程序中。
不知道您的模型到底是什么,但是在代码中看起来可能像这样:
class SalesManSerializer(serializers.ModelSerializer):
total_orders = serializers.IntegerField()
class Meta:
module = models.SalesMan
fields = ('id', 'name', 'total_orders')
序列化器仅负责序列化。他们不为我们构造查询集。也就是说,您需要自己注释查询集。在视图中或查询集将被初始化并传递到序列化器的任何位置,您都可以使用annotation来对带有订单数的对象进行注释。
例如:
class SalesManViewSet(viewsets.ModelViewSet):
serializer_class = SalesManSerializer
def get_queryset(self):
return SalesMan.objects.annotate(
total_trucks = Count('orders'),
)
答案 1 :(得分:0)
您可以使用methodfield
添加它class SalesManSerializer(serializers.ModelSerializer):
count = serializers.SerializerMethodField()
class Meta:
model = models.SalesMan
fields = ('id', 'name', 'count')
def get_count(self, instance):
return Order.objects.count()