tags:

views:

1230

answers:

1

I have two classes with a ManyToMany relationship. I'd like to select one from the first class and access the fields of the related class. It seems like this should be easy. For example:

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

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

So I'd want to do something like:

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

But this doesn't work for me. Thanks for any help.

+5  A: 

Try:

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

It works for me (different models, but the idea is the same):

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

For more on why this works, check out the documentation.

Paolo Bergantino
Great. Thank you.
Mitch