Как добавить поле в набор запросов и заполнить его в цикле?
У меня есть кверисет foo
, который содержит несколько тысяч элементов. Теперь я хочу добавить к этому набору поле bar
, значение которого зависит от некоторой логики, встроенной в цикл. Поэтому я хочу выполнить итерацию foo
и обогатить bar
для каждого элемента.
# Views.py
def example(request):
[..]
# Create `Bar` field for queryset
foo.annotate(bar='')
# Iterate queryset
for item in foo:
[..] # logic that returns a string
# Populate field 'bar'
item.bar = 'example_string'
Однако он уже обрывается на foo.annotate(bar='')
, возвращаясь
QuerySet.annotate() получил невыражение(я): .
Если вы хотите аннотировать непустую строку, вы можете подать иск:
from django.db.models import Value
foo.annotate(bar=Value(''))
При этом аннотировать пустой строкой не имеет особого смысла, вы просто устанавливаете атрибут для ваших Foo
объектов. Я бы также посоветовал обернуть элементы в список, так как в противном случае субскриптинг будет делать новые запросы к базе данных.