You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何从QuerySet的两个ForeignKey字段获取去重男性用户数

原有代码统计的是符合条件的NewModel记录条数,如果同一个男性用户出现在多条NewModel记录的user_id/user_g_id字段中,就会被重复计数。要实现去重统计男性用户总数,有两种常用实现方案:

方案1:直接从User表查询(更直观,推荐)

直接基于User模型过滤,利用User表主键唯一性自动去重,无需额外处理:

from django.db.models import Q

male_count = User.objects.filter(
    # 限定性别为男性
    gender_id=male['id'],
    # 限定用户出现在查询集的两个外键字段中任意一个即可
    Q(id__in=newmodelqueryset.values("user_id")) | Q(id__in=newmodelqueryset.values("user_g_id"))
).count()

方案2:合并两个外键的用户ID后去重统计

如果不想跨表查询,也可以分别取出两个外键的用户ID,用union合并后自动去重再统计:

# 取出所有符合条件的user_id对应男性ID
u1 = newmodelqueryset.filter(user_id__gender_id=male['id']).values_list("user_id", flat=True)
# 取出所有符合条件的user_g_id对应男性ID
u2 = newmodelqueryset.filter(user_g_id__gender_id=male['id']).values_list("user_g_id", flat=True)
# union默认去重,直接统计数量即可
male_count = u1.union(u2).count()

内容的提问来源于stack exchange,提问作者Luff li

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 21:24:01