当前位置: 首页 > backend >正文

django filter按两个属性 去重

在Django中,如果你想基于两个属性去重,可以使用distinct()方法并结合annotate()和Count()来实现。这种方法通常用在查询集中,尤其是在你需要统计基于某些字段的唯一值时。

示例
假设你有一个Person模型,它有两个字段:first_name和last_name,你想要获取所有不同的first_name和last_name组合。

模型示例
from django.db import models

class Person(models.Model):
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
使用annotate()和Count()去重
如果你只是想获取不重复的组合数量,可以使用以下方法:

from django.db.models import Count

获取不重复的first_name和last_name组合的数量

unique_combinations = Person.objects.values(‘first_name’, ‘last_name’).annotate(count=Count(‘id’)).order_by()
这将返回一个查询集,其中每个条目包含一个first_name、一个last_name和一个count(即该组合出现的次数)。如果你只关心组合的唯一性而不关心计数,可以这样做:

获取不重复的first_name和last_name组合的列表

unique_combinations = Person.objects.values(‘first_name’, ‘last_name’).distinct().order_by()
这将返回一个去重后的列表,每个元素是一个字典,包含唯一的first_name和last_name组合。

如果你需要基于某些条件去重
如果你想要在特定条件下进行去重(例如,基于某个字段的值),你可以先进行过滤(filtering),然后应用去重:

例如,只获取年龄大于18的唯一组合

unique_combinations = Person.objects.filter(age__gt=18).values(‘first_name’, ‘last_name’).distinct().order_by()
这样,你就可以根据需要获取基于两个属性去重的结果了。

总结
使用values(‘field1’, ‘field2’)来选择要比较的字段。

使用.distinct()来获取唯一组合。

使用.annotate(Count(‘id’))(或任何其他聚合函数)如果你需要计数。

使用.filter()在应用去重之前添加任何额外的条件。

http://www.xdnf.cn/news/15915.html

相关文章:

  • Linux——自制shell命令行解释器
  • 【LeetCode 热题 100】208. 实现 Trie (前缀树)
  • 剖析Sully.ai:革新医疗领域的AI助手功能启示
  • ssms(SQL 查询编辑器) 添加快捷键 Ctrl+D(功能等于Ctrl+C + Ctrl+V),一步到位
  • Bun v1.2.19发布,node_modules隔离,sql比node快6倍
  • Kotlin 高阶函数初步学习
  • Laravel 系统版本查看及artisan管理员密码找回方法针对各个版本通用方法及原理-优雅草卓伊凡
  • 信息学奥赛一本通 1576:【例 2】选课 | 洛谷 P2014 [CTSC1997] 选课
  • 子网划分核心原理 (网络原理1)
  • [学习] Hilbert变换:从数学原理到物理意义的深度解析与仿真实验(完整实验代码)
  • 《通信原理》学习笔记——第五章
  • Spring 源码阅读(二) 核心概念解析 ApplicationContext、类型转化
  • 【PyTorch】图像二分类项目
  • 【JS逆向基础】数据库之mysql
  • 7.19-7.20 Java基础 | File类 I/O流学习笔记
  • pyhton基础【27】课后拓展
  • 【Linux】3. Shell语言
  • 深度相机的工作模式(以奥比中光深度相机为例)
  • SQL Server(2022)安装教程及使用_sqlserver下载安装图文
  • 《计算机网络》实验报告四 TCP协议分析
  • 0719代码调试记录
  • IsaacLab学习记录(四)
  • Milvus Dify 学习笔记
  • 题单【循环结构】
  • 基于单片机出租车计价器设计
  • 30天打牢数模基础-决策树讲解
  • 【C语言】字符串与字符函数详解(上)
  • C++ 并发 future, promise和async
  • 数位 dp
  • 「Java案例」利用方法打印乘法表