2009-05-29 20 views
14

Ho due classi con una relazione ManyToMany. Mi piacerebbe selezionarne uno dalla prima classe e accedere ai campi della classe correlata. Sembra che questo dovrebbe essere facile. Per esempio:In Django, come si recupera un campo di una classe correlata molti-a-molti?

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

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

Così vorrei fare qualcosa di simile:

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

Ma questo non funziona per me. Grazie per qualsiasi aiuto.

risposta

26

Prova:

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

Funziona per me (diversi modelli, ma l'idea è la stessa):

>>> 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> 

Per ulteriori informazioni su perché questo funziona, check out the documentation.

+0

Grande. Grazie. – Mitch

Problemi correlati