2009-05-29 6 views
14

J'ai deux classes avec une relation ManyToMany. Je voudrais en sélectionner un dans la première classe et accéder aux champs de la classe concernée. Il semble que cela devrait être facile. Par exemple:Dans Django, comment extraire un champ d'une classe liée plusieurs-à-plusieurs?

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

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

donc je veux faire quelque chose comme:

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

Mais cela ne fonctionne pas pour moi. Merci pour toute aide.

Répondre

26

Essayez:

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

Il fonctionne pour moi (modèles différents, mais l'idée est la même):

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

Pour en savoir plus sur pourquoi cela fonctionne, check out the documentation.

+0

Très bien. Je vous remercie. – Mitch

Questions connexes