2012-06-03 2 views
5

Есть ли способ, чтобы выполнить следующие действия в одном вызове:Model.objects.get() или None

Model.objects.get(id=1) else None 

Единственный способ я нашел способ сделать это, выполнив:

try: 
    object = Model... 
except: 
    object = None 

Есть ли способ сделать это за один раз в django?

Update: Там, кажется, не быть способ сделать это другое, чем в try/except блоке, но здесь лучше ответ: In Django, how do I objects.get, but return None when nothing is found?

+0

Ну, кажется, вы уже решили свой вопрос , Как и дополнительный аргумент, используйте try: ... except (с использованием особых исключений), считается хорошей практикой в ​​Python (не говоря уже о Django, который следует более или менее той же философии). –

+2

'(Model.objects.filter (pk = 1) или [None]) [0]' менее явным, но иногда полезным. – okm

+0

Возможный дубликат [In Django, как мне object.get, но возвращать None, когда ничего не найдено?] (Http://stackoverflow.com/questions/3090302/in-django-how-do-i-objects-get бут-возвратного ни-когда-ничего-не-найден) – congusbongus

ответ

2

, если вы используете его в веб-запросе, и вы хочет вернуть 404, если объект не существует, может быть, вы должны использовать

get_object_or_404(Mode, pk=1) 
0

get_object_or_404

в вашей модели сделать. , ,

@models.permalink 
def get_absolute_url(self): 
    return "/blog/%s/" self.slug 
Смежные вопросы