Как аннотировать, фильтровать, а затем получать отношения полей ForeignKey в Django (FilteredRelation или другой метод)?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как аннотировать, фильтровать, а затем получать отношения полей ForeignKey в Django (FilteredRelation или другой метод)?

Сообщение Anonymous »

Я пытаюсь аннотировать отношения ForeignKey, а затем затем использовать новое аннотированное поле в цикле
Из документации:

Код: Выделить всё

>>> from django.db.models import FilteredRelation, Q
>>> Restaurant.objects.annotate(
...     pizzas_vegetarian=FilteredRelation(
...         "pizzas",
...         condition=Q(pizzas__vegetarian=True),
...     ),
... ).filter(pizzas_vegetarian__name__icontains="mozzarella")
Это работает.
Но если я это сделаю:

Код: Выделить всё

>>> from django.db.models import FilteredRelation, Q
>>> rests = Restaurant.objects.annotate(
...     pizzas_vegetarian=FilteredRelation(
...         "pizzas",
...         condition=Q(pizzas__vegetarian=True),
...     )
... )
... for rest in rests:
print(rest.pizzas_vegetarian)
Я получаю

AttributeError: "Объект ресторана не имеет атрибута "pizzas_vegetarian""

Мне нужен доступ к этому «pizzas_vegetarian» в отдельных блоках кода.
Возможно ли это с помощью FilteredRelation?
Какой метод мне следует использовать? использовать для понял?
ОБНОВЛЕНИЕ
Приведенный выше код взят из документации Django.
Но в моем случае каждый ресторан есть «пиццы», и каждая пицца может только относиться к одному типу: 1, 2, 3.
Что мне нужно: при запросе ресторанов (в одном запросе ), для каждого ресторана в наборе запросов задайте поля пицца1, пицца2, пицца3 — эти поля могут быть экземплярами модели связанных пицц или отсутствовать.
Похоже, мне нужно просто создать эти поля пицца1, пицца2, пицца3 внутри моей модели ресторана, но я действительно пытаюсь этого избежать.

Подробнее здесь: https://stackoverflow.com/questions/791 ... -filteredr
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»