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查询可获得正确的结果,并包含所需的所有字段。)

提问:

  • 如何从booth数据库中获取所有字段
  • 如果我得到了正确的结果,如何正确地使用聚合

  • 正确吗?

    不要使用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'))