2009-05-29 15 views
14

Tengo dos clases con una relación ManyToMany. Me gustaría seleccionar uno de la primera clase y acceder a los campos de la clase relacionada. Parece que esto debería ser fácil. Por ejemplo:En Django, ¿cómo recuperas un campo de una clase relacionada de muchos a muchos?

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

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

Así que me gustaría hacer algo como:

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

Pero esto no funciona para mí. Gracias por cualquier ayuda.

Respuesta

26

Probar:

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

Funciona para mí (diferentes modelos, pero la idea es la misma):

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

Para más información sobre por qué esto funciona, check out the documentation.

+0

Genial. Gracias. – Mitch

Cuestiones relacionadas