Ich muss überprüfen, ob ein Objekt vorhanden ist, und das Objekt zurückgeben und dann basierend darauf Aktionen ausführen. Was ist der richtige Weg, um einen 404 zurückzugeben?
try:
listing = RealEstateListing.objects.get(slug_url = slug)
except:
listing = None
if listing:
django
django-views
Rasiel
quelle
quelle
if listing:
sollte ein seinelse:
.Antworten:
Ich würde den 404-Wrapper nicht verwenden, wenn Sie keinen 404 erhalten. Das ist ein Missbrauch der Absicht. Fangen Sie stattdessen einfach die DoesNotExist.
quelle
exists()
wenn Sie etwas mit dem Objekt tun müssen.values_list('id', flat=True)
. wenn ich nur sehen muss, ob es existiertlisting = RealEstateListing.objects.values_list('id', flat=True).get(slug_url=slug)
RealEstateListing.DoesNotExist
sich auf das Modell bezieht und nicht auf das Objekt selbst. Warum ist es nichtRealEstateListing.objects.get(slug_url=slug).DoesNotExist
?Sie können auch tun:
Manchmal ist es klarer,
try: except:
Block zu verwenden , und manchmal macht ein Einzeilerexists()
den Code klarer ... alles hängt von Ihrer Anwendungslogik ab.quelle
exists()
das nicht funktioniertget()
, oder?get()
später tun , wird eine zweite Abfrage an die Datenbank gesendet.try-except
überexists()
.quelle
if listing:
.exists()
. Ich denke, es ist eine gute Idee in SO, mehrere unterschiedliche Antworten zu haben, wie man Dinge macht. Vielleicht ist dies besser für diejenigen, die das Objekt auch verwenden möchten, wenn es existiert. Ich würde keine Regeln aufstellen, ob try / without vermieden werden sollte oder nicht. Manchmal ist es gut und manchmal ist es schlecht, wenn Sie nur sehr kompakten Code erstellen möchten.Ich würde es so einfach wie folgt machen:
Ich sehe keine Notwendigkeit für Versuch / Fang. Wenn das Ergebnis möglicherweise mehrere Objekte enthält, verwenden Sie zuerst (), wie vom Benutzer Henrik Heino gezeigt
quelle