我如何显示来自多对多字段的详细数据而不是 django rest API 中的对象,目前我只获取它的对象

How can i display detailed data from many to many field instead of objects in django rest API , currently im getting only objects of it

我是 Django 的新手,我尝试列出我的模型发票中的所有发票,我只是将项目作为其对象获取,为了使代码高效,我需要在单个查询中获取项目的全部数据如何我可以获取项目的详细信息以及数据而不是项目对象吗

这是我试过的

models.py

class ItemsInvoice(models.Model):
    invoiceId = models.CharField(max_length=20)
    product_Id = models.CharField(max_length=20)
    item_price = models.CharField(max_length=20)

class Invoices(models.Model):
    customer = models.CharField(max_length=10,null=True)
    total_amount = models.CharField(max_length=12,null=True)
    items = models.ManyToManyField(ItemsInvoice,related_name="item_invoice")

views.py

class InvoiceView(ListAPIView):
    serializer_class = InvoiceSerializers

    def get_queryset(self):
        # queryset = Invoices.objects.prefetch_related('items').all().order_by('-id')
        queryset = Invoices.objects.all().order_by('-id')
        return queryset

serializers.py

class InvoiceSerializers(serializers.ModelSerializer):
    class Meta:
        model = Invoices
        fields = '__all__'

如果我 运行 它在我的邮递员身上,它的反应将是这样的

API response what i have

[
    {
        "id": 69,     
        "customer": "4",
        "total_amount": "25000",
        "items": [
            66,
            67,
            68
        ]
    }
]

但实际上我想要这样的输出,即项目字段应列出其中的所有数据

API response what i want

[
    {
        "id": 69,
        "customer": "4",
        "total_amount": "25000",
        "items": [
            {
                "id": 66,
                "invoiceId": "69",
                "product_Id": "3",
                "item_price": "300",
            },
            {
                "id": 67,
                "invoiceId": "69",
                "product_Id": "4",
                "item_price": "200",
            },
            {
                "id": 68,
                "invoiceId": "69",
                "product_Id": "4",
                "item_price": "200",
            }
        ]
    }
]

如何使用 django-orm 或原始查询来实现它

您必须定义 ItemInvoiceSerializer 并设置 many=true。

class ItemInvoiceSerializer(serializers.ModelSerializer):
    class Meta:
        model = ItemsInvoice
        fields = '__all__'

class InvoiceSerializers(serializers.ModelSerializer):
    items = ItemInvoiceSerializer(many=True) # i changed true to True
    class Meta:
        model = Invoices
        fields = '__all__'