我如何显示许多字段中的详细数据而不是django rest API中的对象,当前仅获取对象

我是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响应

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

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

  

我想要的API响应

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

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

hebeipl 回答:我如何显示许多字段中的详细数据而不是django rest API中的对象,当前仅获取对象

您必须定义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__'
本文链接:https://www.f2er.com/3103065.html

大家都在问