Фильтр запроса Django по аннотированному полю с помощью подзапроса

Я пытаюсь дополнительно отфильтровать запрос Django с помощью аннотированного поля:

Мои (упрощенные) таблицы:

class Inventory(models.Model):
    item = models.CharField(max_length=10, primary_key=True)
    lot = models.CharField(max_length=10)
    ...  MORE FIELDS ...

class Car(models.Model):
    name = models.CharField(max_length=10)
    item= models.ForeignKey(Inventory, on_delete=models.PROTECT, null=True, blank=True)
    ...  MORE FIELDS ...

Я хочу, чтобы в наборе результатов для запроса Inventory содержалось имя автомобиля, назначенного этому элементу. Это работает нормально:

Inventory.objects.annotate(car=Subquery(Cars.objects.filter(item=OuterRef('item')).values('name')))

Название автомобиля извлекается в наборе запросов. Раньше я располагал автомобиль в элементе (поэтому было легко фильтровать по автомобилю), но из-за других требований мне пришлось переместить ссылку в другую сторону - теперь у автомобиля есть поле элемента). Я хочу, чтобы после того, как элемент связан с автомобилем, он не мог быть использован для другого автомобиля, поскольку подзапрос должен возвращать один результат.

.

Сейчас я хочу дополнительно отфильтровать набор запросов по аннотированному полю, которое возвращает автомобиль:

Inventory.objects.annotate(car=Subquery(Cars.objects.filter(item=OuterRef('item')).values('name'))).filter(car__icontains='AA')

Сейчас я получаю ошибку raise FieldError('Related Field got invalid lookup: {}'.format(lookup_name))

Возможно ли сделать это так, как я пытаюсь?

Вернуться на верх