Как получить только один объект из таблицы ManyToOne вместо набора запросов? - PullRequest
1 голос
/ 11 марта 2020

Таблица изображений:

id| image   | item_id
15|some/path|   45
16|some/path|   45
17|some/path|   45

Первая попытка:

recommended_items = Item.objects.all().filter(rating__gte=9) // All my items (`item_id` column)

for item in recommended_items :
    image = Images.objects.get(item_id=item.id)[:1]

Работает для первого элемента с id=45, а для остальных возвращает ошибка :

Запрос на сопоставление изображений не существует.

Вторая попытка:

for item in recommended_items :
    image = Images.objects.filter(item=item)[:1]

Сейчас он работает для всех элементов, существующих или нет, но возвращает итеративный объект, и я должен добавить для l oop только для одного объекта, например:

for i in image:
    print(i.image)

Каков правильный способ справиться с этим? Я хочу только одну запись (последнюю, если это возможно)

Ответы [ 2 ]

3 голосов
/ 11 марта 2020

Пожалуйста, используйте last() метод, как показано ниже ...

image = Images.objects.filter(item=item).last()

Для первого использования first() метод ...

image = Images.objects.filter(item=item).first()
0 голосов
/ 11 марта 2020

Почему бы вам просто не использовать индекс элемента?

for item in recommended_items :
    image = Images.objects.filter(item=item)[0]
...