我有一个用many=True
初始化的嵌套序列化器,并且想使用SerializerMethodField()
在输出中添加许多带注释的字段。
如何在没有overriding the manager's default get_queryset
method的情况下注释OrderLineSerializer
查询集?
class OrderLineSerializer(serializers.ModelSerializer):
annotated_field_1 = serializers.SerializerMethodField()
annotated_field_2 = serializers.SerializerMethodField()
annotated_field_3 = serializers.SerializerMethodField()
class Meta:
model = OrderLine
fields = (
'annotated_field_1',
'annotated_field_2',
'annotated_field_3',
)
def get_annotated_field_1(self, instance):
return str(instance.annotated_field_1)
class OrderSerializer(serializers.ModelSerializer):
lines = OrderLineSerializer(many=True)
class Meta:
model = Order
fields = (
'id'
'lines'
)
class OrderAPIViewSet(viewsets.ModelViewSet):
queryset = Order.objects.all()
serializer_class = OrderSerializer
答案 0 :(得分:0)
您可以在SerializerMethodField
中使用OrderSerializer
。像这样:
class OrderSerializer(serializers.ModelSerializer):
lines = serializers.SerializerMethodField()
def get_lines(self, instance):
annotated_lines = instance.lines.annotate(annotated_field_1=...)
return OrderLineSerializer(annotated_lines, many=True).data
class Meta:
model = Order
fields = (
'id'
'lines'
)
这感觉很奇怪,例如,您真的需要注释而不是property
吗?