2016-11-18 2 views
0

Ich habe:prefetch_related() ForeignKey Reverse-Lookup in Django? zwei Modelle

class Company(models.Model): 
    ... 

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

Wie alle Unternehmen mit ihren damit verbundenen Lieferanten zu bekommen?

Ich habe versucht:

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

Was ich falsch mache?

Danke

Antwort

2

prefetch_related just adds the SQL query die Lieferanten zu erhalten, so dass, wenn Sie company.suppliers.all() tun Sie oben auf Company.objects.all() nicht schlagen einen anderen SQL entstehen. Sie können danach normalerweise auf die Lieferanten zugreifen:

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

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

Jede Möglichkeit, zusätzliche SQL-Abfragen einzubeziehen? Ich muss Unternehmen mit Lieferanten holen, um sie in Vorlagen zu verwenden. Versuchte 'select_related ('Lieferanten')', aber ich bekomme: 'django.core.exceptions.FieldError: Ungültige Feldnamen in select_related: 'Lieferanten'. Die Auswahlmöglichkeiten sind: (keine) ' – user2734

+0

Huh, das ist ein separates Problem. Sie verwenden 'select_related' in' Company'? Haben Sie noch 'related_name = 'Lieferanten' im' Supplier'-Modell? –