2012-06-03 10 views
5

Czy istnieje sposób, aby osiągnąć następujące w jednej rozmowy:Model.objects.get() lub None

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

Jedynym sposobem znalazłem sposób, aby to zrobić, wykonując:

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

Czy jest sposób na wykonanie tego w jednym wywołaniu w django?

Aktualizacja: Nie, nie wydaje się być sposób to zrobić inny niż w try/except bloku, ale tutaj jest lepsza odpowiedź: In Django, how do I objects.get, but return None when nothing is found?

+0

Cóż, wydaje się, że już rozwiązany pytanie . Dodatkowym argumentem jest użycie try: ... except (z określonymi wyjątkami) jest uważane za dobrą praktykę w Pythonie (nie mówiąc już o Django, który podąża mniej więcej tą samą filozofią). –

+2

'(Model.objects.filter (pk = 1) lub [Brak]) [0]' jest mniej jednoznaczne, ale czasami przydatne. – okm

+0

możliwy duplikat [w Django, jak mogę objects.get, ale zwrócić None, gdy nic nie zostanie znalezione?] (Http://stackoverflow.com/questions/3090302/in-django-how-do-i-objects-get -but-return-none-when-nothing-is-found) – congusbongus

Odpowiedz

2

jeśli używasz go w żądaniu internetowej, a aby powrócić 404, jeśli obiekt nie istnieje, być może należy użyć

get_object_or_404(Mode, pk=1) 
0

get_object_or_404

w modelu zrobić. . .

@models.permalink 
def get_absolute_url(self): 
    return "/blog/%s/" self.slug 
Powiązane problemy