В Django, как вы получаете поле класса «многие ко многим»? - PullRequest
14 голосов
/ 30 мая 2009

У меня есть два класса с отношением ManyToMany. Я хотел бы выбрать один из первого класса и получить доступ к полям связанного класса. Кажется, это должно быть легко. Например:

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

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

Так что я бы хотел сделать что-то вроде:

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

Но это не работает для меня. Спасибо за любую помощь.

1 Ответ

26 голосов
/ 30 мая 2009

Попробуйте:

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

У меня работает (разные модели, но идея одна и та же):

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

Подробнее о том, почему это работает, , ознакомьтесь с документацией .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...