首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

具有两个外键字段指向同一外部模型的模型的Django聚合?

在Django中,具有两个外键字段指向同一外部模型的模型的聚合可以通过使用django.db.models.Q对象和django.db.models.aggregates模块中的聚合函数来实现。

首先,让我们假设有一个模型ModelA,它具有两个外键字段field1field2,它们都指向同一个外部模型ModelB。我们的目标是对ModelA进行聚合操作。

代码语言:txt
复制
from django.db.models import Q, Count
from myapp.models import ModelA

# 使用Q对象创建两个外键字段的查询条件
query = Q(field1__isnull=False) | Q(field2__isnull=False)

# 使用聚合函数对满足查询条件的ModelA对象进行聚合操作
aggregation = ModelA.objects.filter(query).aggregate(
    total_count=Count('id'),
    distinct_field1_count=Count('field1', distinct=True),
    distinct_field2_count=Count('field2', distinct=True)
)

上述代码中,我们使用Q对象创建了一个查询条件,该条件表示field1field2字段不为空。然后,我们使用filter()方法将该查询条件应用于ModelA对象,获取满足条件的对象集合。最后,我们使用aggregate()方法对满足条件的ModelA对象进行聚合操作。

在聚合操作中,我们使用Count函数来计算总数和去重计数。Count函数接受一个字段名作为参数,并使用distinct=True参数来进行去重计数。

聚合操作的结果将以字典形式返回,包含了总数和去重计数的值。你可以根据需要自定义聚合操作的字段和计算方式。

这是一个使用Django进行模型聚合操作的示例。对于更复杂的聚合需求,你可以参考Django官方文档中关于聚合操作的详细说明:Django官方文档 - 聚合

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

django模型中有关系表删除相关设置

0904自我总结 django模型中有关系表删除相关设置 一.一对一 例如有Author、AuthorDetail两表 author = models.OneToOneField(to='Author...AuthorDetail表中:作者删除详情删除,详情删除作者保留 2)作者找详情用 related_name(detail),详情找作者用 字段(author) 3)db_constraint...Book表中(多一方):出版社删除书不动,书删除没有任何影响 2)出版社找书用 related_name(books),书找出版社 字段(publish) 3)db_constraint...断开表关联,on_delete规定逻辑关联删除动作,models.DO_NOTHING关联无动作 三.以外字段关联 1)断关联,删除关联表记录,键值置空 db_constraint=False,...:出版社删除或书删除彼此不影响,但关系表一定级联删除 2)正向找 字段,反向找 字段related_name 3)db_constraint断开表关联,on_delete不存在(不设置,本质在第三张表中设置

3K20

使用Django实现把两个模型数据聚合在一起

Django中想要把模型聚合得到想要数据可以用F对象。 比如有模型类A和B,A和B之间有关联在一起,A是子表,B是父表(反过来没试过。。...这样操作结果就是可以查询到userid为3且模型类A字段bookid等于模型类B字段bid集合数据了。 F对象是可以比较两个关联模型字段数据。...models.Model): # 写一个方法,定义在管理页面上能够显示字段字段 # grade为Students模型检表,level为Grades模型检表,那么为Level模型字段...添加是'模型字段' # 如果是需要遵循这样语法:本表字段__(双下划线)检表字段检表字段__最终表要显示字段。...以上这篇使用Django实现把两个模型数据聚合在一起就是小编分享给大家全部内容了,希望能给大家一个参考。

1.4K20
  • Django之ForeignKey和ManyToManyField多表查询

    多表查询是模型重要功能之一, Django提供了一套基于关联字段独特解决方案....被索引关系模型可以访问所有参照它模型实例,如Entry.blog作为Blog,默认情况下Blog.entry_set是包含所有参照BlogEntry示例查询集,可以使用查询集API取出相应实例...ManyToManyField.through_fields 上文示例中Membership 有两个指向Person (person 和inviter),这使得关联关系含混不清并让Django 不知道使用哪一个...在这种情况下,必须使用through_fields 明确指定Django 应该使用哪些 through_fields 接收一个二元组('field1', 'field2'),其中field1 为指向定义...ManyToManyField 字段模型键名称(本例中为group),field2 为指向目标模型名称(本例中为person).

    1.8K10

    06.Django基础五之django模型层(二)多表操作

    一 创建模型 表和表之间关系     一对一、多对一、多对多 ,用book表和publish表自己来想想关系,想想里面的操作,加约束和不加约束区别,一对一约束是在一对多约束上加上唯一约束...注意事项: 表名称myapp_modelName,是根据 模型元数据自动生成,也可以覆写为别的名称   id 字段是自动添加 对于字段Django 会在字段名上添加"_id" 来创建数据库中列名...但是我们就不能使用ORM相关方法了,所以我们单纯换成一个其他字段类型,只是单纯存着另外一个关联表主键值是不能使用ORM方法。...名称是聚合标识符,值是计算出来聚合值。名称是按照字段聚合函数名称自动生成出来。如果你想要为聚合值指定一个名称,可以向聚合子句提供它。...F() 实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段值。

    2.7K20

    Django 模型层之多表操作

    Author) def __str__(self): return self.name 注意事项: 1.id字段不写的话会自动添加 2.对于字段,Django会在字段名上添加...要做跨关系查询,就使用两个下划线来连接模型(model)间关联字段名称,知道最终链接到你想要model为止。...名称是聚合标识符,值是计算出来聚合值,名称是按照字段聚合函数名称自动生成出来,如果你想要为聚合值指定一个名称,可以向聚合子句提供一个名字。...Django提供了以下聚合函数 1.expression 引用模型字段一个字符串,或者一个query expression 2.output_field 用来表示返回值model field...,都是将模型字段与常量进行比较,但是,如果想将模型一个字段同一模型另一个字段进行比较该怎么办?

    1.3K20

    Django聚合Django详细解析以及运用在企业级项目里方法

    例如,想计算所有在售图书平均价格。Django查询语法提供了一种描述所有藏书方法。 传递给聚合()参数描述了要计算聚合值。在此示例中,将计算Book模型上价格字段平均值。...到目前为止,我们已经处理了查询模型字段聚合。...但是,有时要聚合值属于所查询模型关联模型。 在聚合函数中指定聚合字段时,Django允许您在筛选相关字段时使用相同双下划线符号。Django将处理需要检索和聚合相关值任何表连接。...它不仅用于,还用于多对多关系。...应用于公共模型字段任何过滤器()(或exclude())都将具有约束被认为是聚合对象效果。 当使用annotate()子句时,过滤器具有约束注释对象计算效果。

    2K40

    Django学习笔记之ORM多表操作

    注意事项:  表名称myapp_modelName,是根据 模型元数据自动生成,也可以覆写为别的名称   id 字段是自动添加  对于字段Django 会在字段名上添加"_id" 来创建数据库中列名...字段 ForeignKey 有一个 null=True 设置(它允许接受空值 NULL),你可以赋给它空值 None 。 添加表纪录  操作前先简单录入一些数据: publish表: ?...要做跨关系查询,就使用两个下划线来链接模型(model)间关联字段名称,直到最终链接到你想要model 为止。...名称是聚合标识符,值是计算出来聚合值。名称是按照字段聚合函数名称自动生成出来。如果你想要为聚合值指定一个名称,可以向聚合子句提供它。...如果我们要对两个字段值做比较,那该怎么做呢? Django 提供 F() 来做这样比较。F() 实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段值。

    2.8K40

    关系数据库设计之(双

    通常,关系用来表示领域模型关联关系,这也是最常见使用方法,而本文讨论关系使用与之不同,是在特定场景下对关系使用,这样场景也会在不同应用系统中出现,所以本设计方法应该具有普适性,适用于各数仓模型设计...code 与assoc_code,当数据不发生变化时,两个字段值保持一致,一旦发生code 变更后,旧记录 assoc_code 字段值则与新记录code 保持一致,主要用于数据分组及过滤; 1)...3 总结 双设计有两个关键特点:1)同一存储了两份,一份用于记录历史,而另一份用于响应变化,并提供对外检索和分组能力;2)维度表与事实表之间关联以带有业务特征hash 值进行关联,而不是自增无意义数据进行关联...这样模型设计充分解决数仓数据灵活性,也降低外部系统变化对数仓数据影响。...,或者人肉方式解决,因此,双设计将有效提升数据系统灵活性和可用性,降低对外部系统要求,从而提升开发效率。

    1.6K61

    Django ORM 多表操作

    目录 Django ORM 多表操作 表模型 表关系 创建模型 逆向到表模型 插入数据 ORM 添加数据(添加) 一对多( ForeignKey) 一对一 (OneToOneFeild) 多对多...ORM 多表操作 表模型 图书表 出版社表 作者表 作者详情表 表关系 一对一:一对一推荐建在查询频率高一方 一对多:字段建在多一方 多对多:字段建在查询频率多一方,在Django第三张表不需要创建...,自动创建 ps:字段不需要写表名_id后面的_id,ORM创建时候自动添加了_id,以及以虚拟字段形式存在 创建模型 '''models.py''' from django.db import...6、若有模型类存在外,创建数据时,要先创建关联模型数据,不然创建包含模型数据时,关联模型数据会找不到 逆向到表模型 插入数据 ps:插入几条数据方便操作 ORM...(常用) 一对多中,设置属性类(多表)中,MySQL 中显示字段名是:属性名_id。

    1.8K20

    如何使用 Django 更新模型字段(包括字段

    Django 应用程序开发中,更新模型字段是一个常见操作,特别是涉及到外字段更新。...本教程将详细介绍如何通过 Django 更新模型字段,重点讨论了解决字段更新方法,特别是使用 attrs 方式实现。1. 简介Django模型是应用程序中管理数据核心部分。...设计模型我们将以一个简单案例来说明如何更新模型字段。假设我们有两个模型:学生表(Student)和成绩表(Score)。成绩表中 student 字段是一个指向学生表中相应记录。...下面我们详细探讨这种更新方式:使用 attrs 方式更新字段Django 中,可以直接通过设置字段方式来更新模型关联。...总结与实践建议在本教程中,我们深入探讨了如何使用 Django 更新模型字段,特别是处理字段更新方法。

    21610

    Django之QuerySet详解

    表达式可以是简单值、对模型(或任何关联模型)上字段引用或者聚合表达式(平均值、总和等)。...匿名参数别名将基于聚合函数名称和模型字段生成。 只有引用单个字段聚合表达式才可以使用匿名参数。 其它所有形式都必须用关键字参数。...若要按照另外一个模型字段排序,可以使用查询关联模型语法。即通过字段名称后面跟两个下划线(__),再加上新模型字段名称,直到希望连接模型。...如果指定字段,每个字典将只包含指定字段/值。如果没有指定字段,每个字典将包含数据库表中所有字段和值。...ForeignKey使用SQL约束ON DELETE CASCADE,任何具有指向要删除对象对象将与它们一起被删除。

    2.3K20

    Django框架学习(四)

    返回是不满足条件所有数据 order_by是排序,参数是排序字段 aggregate聚合,参数是聚合类,返回是一个字典 count没有参数,返回查询结果数量,返回是一个数字 1.2条件查询 注意...import F 1.4Q对象 用于查询时条件之间逻辑关系 from django.db.models import Q 与& 或| 非~ 1.5聚合 聚合类: from django.db.models...order_by 1.7关联查询 1、查询和指定对象关联数据(重点掌握) 由一查多:一对象.多类名小写__set.all() 由多查一:多对象.属性 2、通过模型类进行关联查询 查图书:一类.objects.get...|filter(多类名__字段__条件=值) 查英雄:多类.objects.filter(属性__字段__条件=值) 2.查询集 注意:对于queryset类对象,可以继续调用之前任何一个查询函数...两大特性: 1、惰性查询:只有在使用查询集中数据时才会进行数据库真正查询操作 2、查询结果缓存:如果使用同一个查询集时,只有在第一次使用查询集时会进行数据库查询操作,然后Django框架就会把查询结果存起来

    1.5K41

    django 1.8 官方文档翻译: 2-5-4 聚合 (初稿)

    名称是按照字段聚合函数名称自动生成出来。如果你想要为聚合值指定一个名称,可以向聚合子句提供它。...在聚合函式中指定聚合字段时,Django 允许你使用同样 双下划线 表示关联关系,然后 Django 在就会处理要读取关联表,并得到关联对象聚合。...和 跨关系查找方法类似,作用在你所查询模型关联模型或者字段聚合和注解可以遍历”反转”关系。...例如,我们可以查询所有出版商,并注上它们一共出了多少本书(注意我们如何用 ‘book’指定Publisher -> Book 反转关系): >>> from django.db.models import...这意味着如果你有两个作者同名,那么他们原本各自查询结果将被合并到同一个结果中;两个作者所有评分都将被计算为一个平均分。

    1.6K30

    Django——model基础

    myapp_modelName,是根据 模型元数据自动生成,也可以覆写为别的名称   2、id 字段是自动添加 3、对于字段Django 会在字段名上添加"_id" 来创建数据库中列名...6、字段 ForeignKey 有一个 null=True 设置(它允许接受空值 NULL),你可以赋给它空值 None 。...@163.com") 字段 ?...名称是聚合标识符,值是计算出来聚合值。名称是按照字段聚合函数名称自动生成出来。如果你想要为聚合值指定一个名称,可以向聚合子句提供它。 ?...如果我们要对两个字段值做比较,那该怎么做呢? Django 提供 F() 来做这样比较。F() 实例可以在查询中引用字段,来比较同一个 model 实例中两个不同字段值。 ?

    1.1K100

    Django 模型查询2.3

    ):一个对象构成一个字典,然后构成一个列表返回 写法: filter(1=值1,2=值2) 等价于 filter(1=值1).filter(2=值2) 返回单个值方法 get():返回单个满足条件对象...()、exclude()、get()参数 语法:属性名称__比较运算符=值 表示两个下划线,左侧是属性名称,右侧是比较类型 对于,使用“属性名_id”表示原始值 转义:like语句中使用了%... 注:可以没有__部分,表示等于,结果同inner join 可返向使用,即在关联两个模型中都可以使用 filter(heroinfo_ _hcontent_ _contains...='八') 查询快捷方式:pk,pk表示primary key,默认主键是id filter(pk__lt=6) 聚合函数 使用aggregate()函数返回聚合函数值 函数:Avg,Count,...= list.count() F对象 可以使用模型字段A与字段B进行比较,如果A写在了等号左边,则B出现在等号右边,需要通过F对象构造 list.filter(bread__gte=F('bcommet

    2.4K20

    【云+社区年度正文】Django从入门到精通No.2----模型

    必填参数primary_key=True,则成为数据库主键,无该字段时,django自动创建,一个model不能有两个字段。...1.多对一 因为是关联关系,所以我们必须指定两个类来进行相互操作,这里涉及到一个操作,即ForeignKey字段,而且要定义在多一方。...,必须设中间关联表,关联表设独立主键,并引入两个“多”头主键作为关联表。...,你可以指定一个中介模型来定义多对多关系,可以将其它字段放在中介模型中,源模型字段使用through参数指向中介模型。...=None # 自定义第三张表时,使用字段用于指定关系表中那些字段做多对多关系表 db_constraint=True # 是否在数据库中创建约束

    2.1K00

    Django相关知识点回顾

    __tablename__ = '' django中定义模型类: class 模型类名(models.Model): # 字段名 = models.字段类型(选项参数) ......class Meta: db_table = '' 定义属性: # 表中外字段名格式: hbook = models.ForeignKey('BookInfo...() # 由多查1 多对象.属性 例:hero.hbook 2.通过模型类进行关联查询 # 查图书(一) 一类.objects.get|filter(多类名__字段__条件=值) 例:books =...BookInfo.objects.filter(heroinfo__hcomment__contains='八') # 查英雄(多) 多类.objects.filter(属性__字段__条件=值)...查询结果缓存 使用同一个查询集时,只有在第一次使用查询集时会进行数据库查询操作,然后Django框架就会把查询结果存起来,下一次再使用这个查询集时,使用Django之前存储结果。

    10K51

    django 1.8 官方文档翻译:2-1-1 模型语法

    ,要显式指定并关联到多对多关系涉及模型。...中介模型有一些限制: 中介模型必须有且只有一个到源模型(上面例子中Group),或者你必须使用ManyToManyField.through_fields 显式指定Django 应该使用。...如果你模型中存在超个一个,并且through_fields没有指定,将会触发一个无效错误。 对目标模型有相同限制(上面例子中 Person)。...对于通过中介模型与自己进行多对多关联模型,允许存在到同一模型两个,但它们将被作为多对多关联关系两个(不同)方面。...Changed in Django 1.7: 在Django 1.6 及之前版本中,中介模型禁止包含多于一个

    5K20

    Django学习-第七讲:django常用字段字段属性,和表关系、操作

    第一个参数是引用是哪个模型,第二个参数是在使用引用模型数据被删除了,这个字段该如何处理,比如有CASCADE、SET_NULL等。这里以一个实际案例来说明。...比如有一个Category和一个Article两个模型。一个Category可以有多个文章,一个Article只能有一个Category,并且通过进行引用。...因此在底层,Django为Article表添加了一个属性名_id字段(比如author字段名称是author_id),这个字段是一个,记录着对应作者主键。...即只要这条数据引用了那条数据,那么就不能删除外那条数据。 3.SET_NULL:设置为空。如果那条数据被删除了,那么在本条数据上就将这个字段设置为空。...如果设置这个选项,前提是要指定这个字段一个默认值。 5.SET():如果那条数据被删除了。那么将会获取SET函数中值来作为这个值。

    4K30
    领券