Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3连通模型的查询集_Python_Django_Django Queryset - Fatal编程技术网

Python 3连通模型的查询集

Python 3连通模型的查询集,python,django,django-queryset,Python,Django,Django Queryset,我有一个树模型为我的电子商务项目。想要显示哪些产品以及有多少等待包装。我只想展示新订单的产品和数量 例如: A产品-119 B产品-6 我的模型是: 选项=( (1)新订单, (9,取消), (10,已完成), ) 课程顺序(models.Model): 订单号=models.CharField(最大长度=80) order_date=models.DateField(空白=True,空=True) order_status=models.IntegerField(选项=choices,默认值=

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

例如:

A产品-119 B产品-6

我的模型是:

选项=(
(1)新订单,
(9,取消),
(10,已完成),
)
课程顺序(models.Model):
订单号=models.CharField(最大长度=80)
order_date=models.DateField(空白=True,空=True)
order_status=models.IntegerField(选项=choices,默认值=1)
类元:
详细名称=“订单”
详细名称复数=“订单”
订单=[“订单日期”]
定义(自我):
返回自订单号
类别产品(型号.型号):
product_name=models.CharField(最大长度=250,空白=True,空=True)
barkod=models.CharField(最大长度=60,空白=True,空=True)
raf=models.CharField(最大长度=15,空白=True,空=True)
tax=models.DecimalField(空=真,空=真,最大位数=5,小数位数=0)
类元:
详细名称=“产品”
详细名称复数=“产品”
排序=['pk']
定义(自我):
返回self.product\u名称
类OrderItems(models.Model):
order=models.ForeignKey(Orders,on_delete=models.CASCADE,related_name='order')
product=models.ForeignKey(产品,on\u delete=models.PROTECT,related\u name='product\u order')
数量=型号.CharField(最大长度=6,空白=真,空=真)
price=models.DecimalField(空白=True,空=True,最大位数=9,小数位数=2)
类元:
详细名称=“项目”
详细名称
排序=['-pk']
定义(自我):
返回自订单。订单号
有3个模型相互连接。我需要新订单中的产品和总数量。
我找不到正确的方法。有什么建议吗?

您可以使用
groupby
这样做:

from django.db.models import Sum
OrderItems.objects.filter(order__order_status=1).values('product').annotate(total=Sum('quantity')).values('product__name', 'total')