2009-05-29 3 views
14

Ich habe zwei Klassen mit einer ManyToMany-Beziehung. Ich möchte eine aus der ersten Klasse auswählen und auf die Felder der zugehörigen Klasse zugreifen. Es scheint, als ob das einfach sein sollte. Zum Beispiel:Wie können Sie in Django ein Feld einer Viele-zu-Viele-Klasse abrufen?

class Topping(models.Model): 
    name = models.CharField(max_length=40) 

class Pizza(models.Model): 
    name = models.CharField(max_length=40) 
    toppings = models.ManyToManyField(Topping) 

Also würde ich will, wie etwas zu tun ist:

Pizza.objects.filter(name = 'Pizza 1')[0].toppings[0] 

Aber das ist für mich nicht funktioniert. Danke für jede Hilfe.

Antwort

26

Versuchen:

Pizza.objects.filter(name = 'Pizza 1')[0].toppings.all()[0] 

Es funktioniert für mich (verschiedene Modelle, aber die Idee ist die gleiche):

>>> Affiliate.objects.filter(first_name = 'Paolo')[0] 
<Affiliate: Paolo Bergantino> 
>>> Affiliate.objects.filter(first_name = 'Paolo')[0].clients 
<django.db.models.fields.related.ManyRelatedManager object at 0x015F9770> 
>>> Affiliate.objects.filter(first_name = 'Paolo')[0].clients[0] 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
TypeError: 'ManyRelatedManager' object is unindexable 
>>> Affiliate.objects.filter(first_name = 'Paolo')[0].clients.all() 
[<Client: Bergantino, Amanda>] 
>>> Affiliate.objects.filter(first_name = 'Paolo')[0].clients.all()[0] 
<Client: Bergantino, Amanda> 

Für mehr auf, warum dies funktioniert, check out the documentation.

+0

Großartig. Vielen Dank. – Mitch

Verwandte Themen