Python, Django: 查询组合模型?

Python, Django: Query on combined models?

在我的应用程序中,我有多个 模型,例如:

models.py:

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


class Coworker(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    company = models.ForeignKey(Company, null=False, blank=False, on_delete=models.CASCADE)

如您所见,一个公司可以包含一个、多个或没有同事!是否可以查询 Company 但也可以从连接的 Coworker 接收数据?例如这样的事情:

id    |    Company    |    Coworker
1     |    Company_A  |    Coworker_A
2     |    Company_B  |    
3     |    Company_C  |    Coworker_B
4     |    Company_C  |    Coworker_C
5     |    Company_C  |    Coworker_D
6     |    Company_D  |    Coworker_E
7     |    Company_D  |    Coworker_F
8     |    Company_E  |    
9     |    Company_F  |    Coworker_G
10    |    Company_F  |    Coworker_H
...

我的问题是,我无法查询 Coworker,因为我不想错过那些 Companies没有相关数据!

感谢您的帮助,祝您今天愉快!

很简单,按公司查询并为工人预取结果:

Company.objects.prefetch_related("coworker_set").all()

这样做的目的是为您提供一个公司列表,其中包含属性 coworker_set 中的员工列表。它还将在单个查询中填充这些属性(这就是 prefetch_related 的重点)。

更具体地说,您可以通过以下方式使用此类查询:

for company in Company.objects.prefetch_related("coworker_set").all():
    print(company.name)
    for coworker in company.coworker_set.all():
        print(coworker.first_name)
        print(coworker.last_name)

这保证您将遍历所有公司以及所有同事,并且您只会遍历每个公司一次(实际上,如果您通过同事查询,您会多次看到一些公司,而另一些 none)。