Использование объекта 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)
Вернуться на верх