Как добавить поле в набор запросов и заполнить его в цикле?
У меня есть кверисет 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 объектов. Я бы также посоветовал обернуть элементы в список, так как в противном случае субскриптинг будет делать новые запросы к базе данных.