В Django, как вы извлекаете поле класса со многими из многих?

У меня есть два класса с отношением 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

Try:

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>

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