基于2-3个相关表的Django查询集
基于2-3个相关表的Django查询集,django,python-3.x,django-queryset,Django,Python 3.x,Django Queryset,我在数据库中有3个相关的表 from django.db import models # Create your models here. class Country(models.Model): country_code = models.CharField('Country code', unique=True, max_length=3) country_name = models.CharField('Country Name', max_length=25, defa
我在数据库中有3个相关的表
from django.db import models
# Create your models here.
class Country(models.Model):
country_code = models.CharField('Country code', unique=True, max_length=3)
country_name = models.CharField('Country Name', max_length=25, default="")
class Customers(models.Model):
dnr = models.CharField('Customer Nr', max_length=8, unique=True)
dname = models.CharField('Customer Name', max_length=50, default="")
dcountry = models.ForeignKey(Country, on_delete=models.CASCADE)
class BigTable(models.Model):
deb_nr_f = models.ForeignKey(Customes, on_delete=models.CASCADE, related_name='debitor_fnr')
sales_2016 = models.IntegerField('Abs. 2016', default=0)
sales_2017 = models.IntegerField('Abs. 2017', default=0)
sales_2018 = models.IntegerField('Abs. 2018', default=0)
sales_2019 = models.IntegerField('Abs. 2019', default=0)
sales_2020 = models.IntegerField('Abs. 2020', default=0)
客户编号1///2016年销售额///2017年销售额//……
客户编号2///2016年销售额///2017年销售额//……
客户编号…
国家编号1///2016年销售额///2017年销售额//
国家编号2///2016年销售额///2017年销售额//
国家编号…
BigTable.objects.values('deb\u nr\u f\u dname','sales\u 2016','sales\u 2017',…)
BigTable.objects.values('deb\u nr\u f\u dcountry\u country\u name'、'sales\u 2016'、'sales\u 2017'、…)
from django.db.models import Sum
BigTable.objects.values('deb_nr_f').order_by('deb_nr_f').annotate(2016_sum=Sum('sales_2016')).annotate(2017_sum=Sum('sales_2017'))...
我假设您正在尝试使用客户模型 从两个表中创建查询集:Cutomers和Bigtables。 质疑 说明:这里我使用查找来访问外键值。在BigTable模型中,您已将deb_nr_f保存为客户模型的相关\u name='debitor\u fnr'外键字段。因此,可以使用相关字段childmodelrelatedname\uu childfieldname来访问记录 从三个表中创建查询集:国家、客户和BigTable 质疑 解释与上面的几乎相似,我在“dcountry”字段的客户模型中使用外键字段访问国家表。这就像parentmodelforeignkeyfield\uuu parentfieldname一样
有关更多信息,请参考此信息。谢谢您的输入。它只适用于大表中的单个记录。很抱歉忘了提一下,大表包含每个客户/借方的多条记录(因为营业额是根据产品结构的,这与产品无关)。我如何才能在查询中获得上述时间段内每个客户的合计销售额。谢谢您可以使用annotate完成此操作。您可以参考此文档。第一次查询的示例:
Customers.objects.values('dnr','dname')。注释(平均值('debitor\u fnr\u sales\u 2016'))
。我希望这对你有帮助。此外,对于聚合函数,请遵循以下步骤,感谢您的输入。它只适用于大表中的单个记录。很抱歉忘了提一下,大表包含每个客户/借方的多条记录(因为营业额是根据产品结构的,这与产品无关)。我如何才能在查询中获得上述时间段内每位客户的合计销售额?非常感谢。
Customers.objects.values('dnr','dname','debitor_fnr__sales_2016','debitor_fnr__sales_2017'....)
Customers.objects.values('dcountry__country_name','dnr','dname','debitor_fnr__sales_2016','debitor_fnr__sales_2017'....)