基于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)
  • 如何从两个表中创建查询集:Cutomers和Bigtables,格式如下:
    客户编号1///2016年销售额///2017年销售额//……
    客户编号2///2016年销售额///2017年销售额//……
    客户编号…

  • 如何从以下三个表中创建查询集:国家、客户和BigTable:
    国家编号1///2016年销售额///2017年销售额//
    国家编号2///2016年销售额///2017年销售额//
    国家编号…

  • 谢谢你观看

    Django提供了一种强大而直观的方式来“跟踪”关系 在查找中,自动为您处理SQL连接,后面是 场景。要跨越关系,请使用相关的字段名 跨模型的字段,用双下划线分隔,直到 去你想去的地方

  • 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'....)