2016-11-18 118 views
0

我有两个型号:prefetch_related()在Django中的ForeignKey反向查找?

class Company(models.Model): 
    ... 

class Supplier(models.Model): 
    company = models.ForeignKey(Company, null=True, related_name="suppliers") 

如何获得所有与公司及其相关供应商?

我已经试过:

Company.objects.prefetch_related('suppliers') 
Company.objects.prefetch_related('supplier_set') 
Company.objects.prefetch_related('suppliers').all() 
... 

我做错了吗?

谢谢

回答

2

prefetch_related just adds the SQL query得到供应商,这样,当你做company.suppliers.all()你不招致另一个SQL击中的Company.objects.all()顶部。您可以通常访问以下供应商:

companies = Company.objects.all().prefetch_related('suppliers') 

for company in companies: 
    # Does not require a new SQL query 
    suppliers = company.suppliers.all() 
+0

任何方式来包括额外的SQL查询?我需要与供应商联系,以便在模板中使用它。试过'select_related('suppliers')',但是我得到:'django.core.exceptions.FieldError:在select_related中给出的无效字段名称:'suppliers'。选择是:(无)' – user2734

+0

嗯,这是一个单独的问题。你在'公司'上使用'select_related'? “供应商”模型中是否还有'related_name ='suppliers''? –