You need to enable JavaScript to run this app. Django查询:获取公司在对应国家内唯一存在的Group实例
优惠活动
大模型
产品
解决方案
定价
更多

Django查询:获取公司在对应国家内唯一存在的Group实例

需求说明

现有模型定义如下:

class Company(Model):
    name = models.CharField(max_length=250)

class Group(Model):
    name = models.CharField(max_length=250)
    company = models.ForeignKey('Company', on_delete=models.CASCADE)
    country = CountryField(default='US')

业务场景中存在同一家公司在单个国家下有多个Group实例的情况,需要查询获取所有在所属国家内是对应公司唯一存在的Group实例。

实现方案

你可以通过Django ORM的注解+子查询能力实现,仅需一次数据库查询即可拿到结果:

from django.db.models import Count, OuterRef, Subquery

# 构造子查询:统计与当前Group同公司、同国家的Group总数量
group_count_subquery = Group.objects.filter(
    company=OuterRef('company'),
    country=OuterRef('country')
).values('company').annotate(total=Count('id')).values('total')

# 注解后过滤总数为1的Group,即为目标结果
unique_groups = Group.objects.annotate(
    same_combination_total=Subquery(group_count_subquery)
).filter(same_combination_total=1)
可选优化

如果该查询是高频查询,可在Group模型中增加company和country的联合索引,大幅提升查询效率:

class Group(Model):
    name = models.CharField(max_length=250)
    company = models.ForeignKey('Company', on_delete=models.CASCADE)
    country = CountryField(default='US')
    
    class Meta:
        indexes = [
            models.Index(fields=['company', 'country']),
        ]

内容的提问来源于stack exchange,提问作者Teddy Ondieki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 00:18:04