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
相关产品推荐
相关产品推荐

