3个连接模型的查询集

问题描述 投票:0回答:1

我的电子商务项目有一个树形模型。想显示哪些产品和多少等待包装的产品。我只想显示新订单的产品和数量。

例如:A产品-119B产品-6

A产品-119B产品-6

我的模型是。

CHOICES = (
    (1, _("New Orders")),
    (9, _("Canceled")),
    (10, _("Completed")),

)

class Orders(models.Model):
    order_no = models.CharField(max_length=80)
    order_date = models.DateField(blank=True,null=True)
    order_status = models.IntegerField(choices=CHOICES, default=1)

    class Meta:
        verbose_name = "Order"
        verbose_name_plural = "Orders"
        ordering = ['order_date']


    def __str__(self):
        return self.order_no

class Products(models.Model):

    product_name = models.CharField(max_length=250,blank=True,null=True)
    barkod = models.CharField(max_length=60,blank=True,null=True)
    raf = models.CharField(max_length=15,blank=True,null=True)
    tax = models.DecimalField(blank=True,null=True, max_digits=5, decimal_places=0)

    class Meta:
        verbose_name = "Product"
        verbose_name_plural = "Products"
        ordering = ['pk']

    def __str__(self):
        return self.product_name

class OrderItems(models.Model):

    order = models.ForeignKey(Orders,on_delete=models.CASCADE,related_name='order')
    product = models.ForeignKey(Products,on_delete=models.PROTECT,related_name='product_order')
    quantity = models.CharField(max_length=6,blank=True,null=True)
    price = models.DecimalField(blank=True,null=True, max_digits=9, decimal_places=2)


    class Meta:
        verbose_name = "Item"
        verbose_name_plural = "Items"
        ordering = ['-pk']


    def __str__(self):
        return self.order.order_no

我的模型是: 有三个模型相互连接。我需要新订单中的产品和它们的总数量,我找不到正确的方法。有什么建议吗?

python django django-queryset
1个回答
1
投票

你可以尝试像这样使用 group_by:

from django.db.models import Sum
OrderItems.objects.filter(order__order_status=1).values('product').annotate(total=Sum('quantity')).values('product__name', 'total')
© www.soinside.com 2019 - 2024. All rights reserved.