【发布时间】:2019-08-16 19:23:04
【问题描述】:
我有一个包含付款和支付线的一对多关系模型。如何将所有支付线与相同的项目分组并显示在序列化程序中。关键是付款属于同一订单,订单id是付款模型中的属性之一。
views.py
class OrderItemViewSet(viewsets.ReadOnlyModelViewSet):
queryset = Payment.objects.all()
def get_queryset(self):
return self.queryset.filter(order_id=self.request.GET.get("order_id"))
serializer_class = PaymentSerializer
serializers.py:
class PaymentLineSerializer(ModelSerializer):
class Meta:
model = PaymentLine
fields = (
"item_number",
"currency",
"available_quantity",
"order_total_amount",
)
class PaymentSerializer(ModelSerializer):
payment_lines = PaymentLineSerializer(PaymentLine.objects.select_related("payment"), many=True)
class Meta:
model = Payment
fields = ("order_id", "total_amount", "currency", "payment_lines")
要显示这个 json:
[
{
"order_id": 4,
"total_amount": "250.964024",
"currency": "USD",
"payment_lines": [
{
"item_number": 1100,
"currency": "USD",
"available_quantity": 0,
"order_total_amount": 0,
},
{
"item_number": 1200,
"currency": "USD",
"available_quantity": 1,
"order_total_amount": 224.982012,
}
]
}
]
而不是这个:
[
{
"order_id": 4,
"total_amount": "444.700000",
"currency": "USD",
"payment_lines": [
{
"item_number": 1100,
"currency": "USD",
"available_quantity": 1,
"order_total_amount": 25.982012,
},
{
"item_number": 1200,
"currency": "USD",
"available_quantity": 1,
"order_total_amount": 224.982012,
}
]
},
{
"order_id": 4,
"total_amount": "-25.982012",
"external_reference_type": "MAG",
"currency": "USD",
"payment_lines": [
{
"item_number": 1100,
"currency": "USD",
"available_quantity": -1,
"order_total_amount": -25.982012,
}
]
}
]
【问题讨论】: