Есть ли обходной путь для ошибки Django `ModelDoesNotExist` в подобной ситуации?

При выполнении ModelDoesNotExist я получаю ошибку manage.py runserver, потому что в файле в моем каталоге я делаю запрос к таблице, которая еще не заполнена.

def __init__(self):
    self.spotify_object = SocialToken.objects.get(account__provider="spotify")

Выше представлен класс, созданный для выполнения своего рода аутентификации, и таблица SocialToken заполняется только после того, как я войду в систему. Теперь мне интересно, есть ли способ избежать ошибки, запустив эту часть кода только после входа в систему? Я использую класс только в конечной точке, и за это время таблица была бы заполнена, но тот факт, что она не заполняется перед запуском сервера, вызывает ошибку DoesNotExist. Есть ли решение этой проблемы?

Traceback

File "C:\Users\Kwaku Biney\Desktop\sparison-1\project\Sparison\views.py", line 4, in <module>
from .authentication import SparisonCacheHandler
File "C:\Users\Kwaku Biney\Desktop\sparison-1\project\Sparison\authentication.py", line 43, in 
<module>
cache_handler = SparisonCacheHandler() ,
 File "C:\Users\Kwaku Biney\Desktop\sparison-1\project\Sparison\authentication.py", line 25, 
in __init__
self.spotify_object = SocialToken.objects.get(account__provider="spotify")
File "C:\Users\Kwaku Biney\Desktop\sparison-1\project\venv\lib\site- 
packages\django\db\models\manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\Users\Kwaku Biney\Desktop\sparison-1\project\venv\lib\site- 
packages\django\db\models\query.py", line 429, in get
raise self.model.DoesNotExist(
allauth.socialaccount.models.DoesNotExist: SocialToken matching query does not exist.

В моем views.py я импортирую класс, который содержит запрос, и появляется ошибка.

Есть два способа избежать ошибки DoesNotExist.

A) Используйте .filter() вместо .get()
. Фильтрация приводит к пустому набору запросов, когда поиск оказывается пустым.

def __init__(self):
    self.spotify_object = SocialToken.objects.filter(account__provider="spotify")

B) Используйте get_object_or_404() вместо .get()
. Это встроенная функция django:

Calls get() on a given model manager, but it raises Http404 instead of the model’s DoesNotExist exception.

Документация Django

def __init__(self):
    self.spotify_object = SocialToken.objects.get_object_or_404(account__provider="spotify")

Надеюсь, я смог вам помочь. Хорошего дня.

Вернуться на верх