Home > Enterprise >  What to do if queryset is none
What to do if queryset is none

Time:07-01

I have a News model, where each instance has a unique date. Which means that every day has exactly one News-instance related to it. I am redirecting to the detail-view of the News-instance from the navbar.

To achieve this am I using a context_processor. The context_processor.py file looks like this:

from news.models import TodayNews
import datetime


def todays_news(request):
    todays_news = TodayNews.objects.get(date=datetime.date.today())
    return {'news': todays_news} 

This works completely fine as long as the News model has an instance on that particular date. Otherwise it returns the following error (which is very logical):

TodayNews matching query does not exist.

My question is, how can I do something different if the query is empty, for example if one particular date does not have a news-instance? What should I return instead of 'news': todays_news?

CodePudding user response:

You can work with a try-except to return None in case the TodayNews object is not found:

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}

You can also use .first() [Django-doc] to return the first item, this will return None if no item can be found:

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}
  • Related