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

