Фильтр запроса 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))
Возможно ли сделать это так, как я пытаюсь?