Использование объекта F в условии filteredRelation в Django
Я пытаюсь использовать Django (2.2) filteredRelation с чем-то вроде этого:
products = Product.objects.annotate(
valid_stocks=FilteredRelation(
'stocks', condition=(
Q(stocks__nb_ordered__lt=F('stocks__nb_total'))
)
)
)
Похоже, что Django не может оценить этот запрос, и я получаю следующую ошибку:
ProgrammingError: отсутствует запись FROM-clause для таблицы "t7" LINE 1: ...ce_produce". "id" = valid_stocks. "produce_id" AND (T7. "custom...
)
Обратите внимание, что это работает, как и ожидалось, заменяя объект F некоторым целым числом.
Q(stocks__nb_ordered__lt=10
Это странно, потому что это ограничение не документировано, см. https://docs.djangoproject.com/en/2.2/ref/models/querysets/#filteredrelation-objects
У кого-нибудь есть идея, как решить эту проблему?
Вам необходимо использовать имя аннотированного фильтруемого отношения в вашем объекте F
вместо оригинального имени - F('valid_stocks__nb_max_available')
produces = Produce.objects.annotate(
valid_stocks=FilteredRelation(
'stocks', condition=(
Q(stocks__customer_nb_ordered__lt=F('valid_stocks__nb_max_available'))
)
)
).filter(valid_stocks__isnull=False)