Mam prostą aplikację bloga z modelem "Post". Jeśli mogę usunąć wszystkie wpisy w modelu post pojawia się błąd, gdy próbuję odwołać pierwszą pozycję na liście po uporządkowanej według daty, które zrobiłem tak:django jak zdobyć 0 pozycję z możliwie pustej listy
latest_post = Post.objects.order_by('-date_created')[0]
Błąd jest: IndexError: Index Lista poza zasięgiem
jako poprawka, teraz uzyskać pozycję tak:
all_posts = Post.objects.order_by('-date_created')
latest_post =()
if (all_posts):
latest_post = all_posts[0]
to działa, jeśli nie ma żadnych przedmiotów w moim modelu „post”, i nie jest wyjątek. Jednak dla mnie wydaje się, że zbyt wiele kodu, aby zrobić coś dość proste. Zakładam, że jest lepszy sposób na to, używając interfejsu API derygo QuerySet, ale nie można znaleźć niczego w dokumentacji.
Wszelkie pomysły?
EDIT: O dziwo, ten wyrzuca żadnego błędu, gdy nie ma żadnych przedmiotów w modelu post:
latest_post_list = Post.objects.all().order_by('-date_created')[1:10]
+1 dla "try ... except". Łatwiej jest prosić o przebaczenie niż pozwolenie. –
+1 za sugerowanie najnowszego jako jeszcze lepszego sposobu rozwiązania problemu. –
Zauważ, że '.latest()' nie odfiltrowuje żadnych pustych wpisów - i wartości null sortują najpierw normalnie :). Więc jeśli daty mogą być zerowe, potrzebujesz 'Post.objects.exclude (date_created = None) .latest ('date_created')' – rcoup