【发布时间】:2019-11-22 03:22:27
【问题描述】:
我有一个使用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
【问题讨论】:
-
不确定我是否理解您的问题。在
OrderAPIViewSet中定义queryset值的时候为什么不注释呢? -
@LucaBezerra
OrderAPIViewSet中的模型是Order,我正在尝试注释OrderLine模型。我添加了更多代码,希望可以使问题更清楚。 -
您需要数据库计算这些字段吗?如果没有,我建议您为每个所谓的 annotated 字段添加一个 @property 到您的
OrderLine模型中,这些字段返回正确的值,并为 @ 中的每个属性声明一个ReadOnlyField987654334@
标签: django django-rest-framework