Python 德扬戈。如何获取联接查询和分组中的所有字段
我需要连接两个表,并通过Python 德扬戈。如何获取联接查询和分组中的所有字段,python,sql,django,django-queryset,Python,Sql,Django,Django Queryset,我需要连接两个表,并通过id进行摸索,并通过一些字段获得两个聚合函数: models.py 类产品(models.Model): brand=models.CharField(最大长度=45,空白=True,空=True) name=models.CharField(max_length=45,blank=True,null=True) cluster=models.CharField(最大长度=45,空白=True,空=True) target_market=models.CharField(
id
进行摸索,并通过一些字段获得两个聚合函数:
models.py
类产品(models.Model):
brand=models.CharField(最大长度=45,空白=True,空=True)
name=models.CharField(max_length=45,blank=True,null=True)
cluster=models.CharField(最大长度=45,空白=True,空=True)
target_market=models.CharField(max_length=10,blank=True,null=True)
类Vardata(models.Model):
month=models.DateField(空=真,空=真)
sales_units=models.IntegerField(空白=True,空=True)
price=models.FloatField(blank=True,null=True)
fk_products=models.ForeignKey(MntProducts,models.DO_NOTHING,db_column='fk_products',blank=True,null=True)
数据:
我需要退出:
exit[0]
{'id': 12,
'brand': 'vendor1',
'name': 'name1',
'cluster': 'it',
'target_market': 'C',
'sum__sales_units': 540,
'avg__price': 180
}
我尝试从数据库内部联接
SQL查询中获取表到QuerySet
的所有字段;在使用注释(总和('sales_units',平均('price'))
后,请参见查询集
:
但我的查询不从查询中的父表(产品)中获取字段
views.py
qry\u total\u execute=Vradata.objects.选择相关(“fk\u产品”).筛选(fk\u products\uu in=list\u products)
它写
QuerySet
具有正确数量的记录,但不包含来自products
的字段,仅来自vardata
(手动在MySQL中使用此SQL查询可获得正确的结果,并包含所需的所有字段。)
提问:
正确吗?不要使用model
Vardata
,让我们使用产品
并直接添加注释
qry\u total\u execute=Products.objects.filter(id\u in=list\u Products)\
注释(总和(可变数据销售单位),平均值(可变数据价格)\
值()
Vardata.objects.all()
('2020-03-01', '20', '180', '12')
('2020-04-01', '15', '182', '12')
('2020-05-01', '10', '178', '12')
('2020-03-01', '30', '120', '13')
('2020-04-01', '35', '122', '13')
('2020-05-01', '10', '118', '13')
('2020-03-01', '20', '150', '14')
('2020-04-01', '15', '155', '14')
('2020-05-01', '10', '156', '14')
exit[0]
{'id': 12,
'brand': 'vendor1',
'name': 'name1',
'cluster': 'it',
'target_market': 'C',
'sum__sales_units': 540,
'avg__price': 180
}
>>> qry_total_execute.query('SELECT `vardata`.`id`, `vardata`.`month`, `vardata`.`sales_units`, vardata`.`price_rur`, `vardata`.`fk_products`, `products`.`id`, `products`.`brand`, `products`.`name`, `products`.`cluster`, `products`.`target_market` FROM `vardata` INNER JOIN `products` ON (`vardata`.`fk_products` = `products`.`id`) WHERE `vardata`.`fk_products` IN (12, 13, 14)
qry_total_execute.values('id', 'brand', 'name', 'cluster', 'target_market').'annotate(Sum('sales_units', Avg('price'))