不使用循环的Django复杂查询

不使用循环的Django复杂查询,django,django-models,Django,Django Models,我有两个这样的模型 class Employer(models.Model): name = models.CharField(max_length=1000,null=False,blank=False) eminence = models.IntegerField(null=False,default=4) class JobTitle(models.Model): name = models.CharField(max_length=1000,null=False

我有两个这样的模型

class Employer(models.Model):
    name = models.CharField(max_length=1000,null=False,blank=False)
    eminence = models.IntegerField(null=False,default=4)

class JobTitle(models.Model):
    name = models.CharField(max_length=1000,null=False,blank=False)
    employer= models.ForeignKey(JobTitle,unique=False,null=False)

class People(models.Model):
    name = models.CharField(max_length=1000,null=False,blank=False)
    jobtitle = models.ForeignKey(JobTitle,unique=False,null=False)
我想随机列出5个雇主,每个雇主有一个职位。但是,职称应从人数最多的雇主的前10个职称中选取

一种方法可以是

employers = Employer.objects.filter(isActive=True).filter(eminence__lt=4 ).order_by('?')[:5]

for emp in employers:
    jobtitle = JobTitle.objects.filter(employer=emp)... and so on.
然而,通过选定的雇主进行循环可能是不必要的。有什么方法可以在一个查询中完成吗

谢谢

有!退房:

select_related()
告诉Django使用联接跟踪所有外键关系。这将导致一个大型查询,而不是许多小型查询,在大多数情况下,这是您想要的。您得到的
QuerySet
将被预先填充,Django不必从数据库延迟加载任何内容


过去,我曾使用
select_related()
来解决几乎完全相同的问题。

我已经编写了这样的代码块,它可以正常工作。虽然我循环了<代码>雇主,因为我已经使用了<代码>选择相关(“作业标题”)<代码>,但我认为它没有击中数据库,工作速度更快。

employers = random.sample(Employer.objects.select_related('jobtitle').filter(eminence__lt=4,status=EmployerStatus.ACTIVE).annotate(jtt_count=Count('jobtitle')).filter(jtt_count__gt=0),3)

jtList = []
for emp in employers:
    jt = random.choice(emp.jobtitle_set.filter(isActive=True).annotate(people_count=Count('people')).filter(people_count__gt=0)[:10])
    jtList.append(jt)

你能看看我的答案吗?实际上,我对解决办法没有把握。。谢谢