Obrazy tabeli:

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

Pierwsza próba:

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]

Działa w przypadku pierwszego elementu z id=45, ale w przypadku pozostałych zwraca błąd :

Obrazy pasujące do zapytania nie istnieje.

Druga próba:

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

Teraz działa dla wszystkich elementów, istniejących lub nie, ale zwraca obiekt iteracyjny i powinienem dodać pętlę for tylko dla jednego obiektu, na przykład:

for i in image:
    print(i.image)

Jaki jest właściwy sposób radzenia sobie z tym? Chcę tylko jedną płytę (ostatnią, jeśli to możliwe)

1
Dimitur Dimitrov 11 marzec 2020, 14:44

2 odpowiedzi

Najlepsza odpowiedź

Użyj metody last() jak poniżej ...

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

Do pierwszego użycia metody first() ...

image = Images.objects.filter(item=item).first()
3
MK Patel 11 marzec 2020, 11:47

Dlaczego po prostu nie użyjesz indeksu elementu?

for item in recommended_items :
    image = Images.objects.filter(item=item)[0]
0
Lothric 11 marzec 2020, 11:48