在我的應用程式中,我有多個模型,例如:
模型.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
...
我的問題是,我不能查詢的同事,因為我不想錯過這些公司有沒有相關資料!
感謝您的幫助,祝您有美好的一天!
uj5u.com熱心網友回復:
很簡單,按公司查詢并為工人預取結果:
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)
這保證您將遍歷所有公司以及所有同事,并且您只會遍歷每個公司一次(實際上,如果您被同事查詢,您會多次看到某些公司,而其他公司則根本沒有)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/378548.html
