Что делать, если queryset не имеет значения
У меня есть модель News, где каждый экземпляр имеет уникальную дату. Это означает, что каждый день имеет ровно один News-экземпляр, связанный с ним. Я перенаправляю на детальный просмотр экземпляра новости из навигационной панели.
Для достижения этой цели я использую context_processor. Файл context_processor.py выглядит следующим образом:
from news.models import TodayNews
import datetime
def todays_news(request):
todays_news = TodayNews.objects.get(date=datetime.date.today())
return {'news': todays_news}
Это работает совершенно нормально до тех пор, пока модель News имеет экземпляр на эту конкретную дату. В противном случае возвращается следующая ошибка (что очень логично):
TodayNews matching query does not exist.
Мой вопрос заключается в том, как я могу сделать что-то другое, если запрос пуст, например, если у одной конкретной даты нет новости-объекта? Что я должен вернуть вместо 'news': todays_news
?
Вы можете работать с try
-except
для возврата None
в случае, если объект TodayNews
не найден:
from news.models import TodayNews
import datetime
def todays_news(request):
try:
todays_news = TodayNews.objects.get(date=datetime.date.today())
except TodayNews.DoesNotExist:
todays_news = None
return {'news': todays_news}
Вы также можете использовать .first()
[Django-doc] для возврата первого элемента, это вернет None
если ни один элемент не может быть найден:
from news.models import TodayNews
import datetime
def todays_news(request):
todays_news = TodayNews.objects.filter(date=datetime.date.today()).first()
return {'news': todays_news}