Seite 1 von 1
Fehler bei Zugriff auf Model mit "get" abfangen
Verfasst: Dienstag 24. Oktober 2023, 14:03
von Pitwheazle
Wenn ich z.B. mit
auf ein Objekt zugreifen will, das nicht existiert, bekomme ich eine Fehlermeldung. Mir fällt natürlich nichts besseres ein, als dies mit try/except abzufangen. Das geht doch sicher auch anders. So etwa mit:
... oder so?
Re: Fehler bei Zugriff auf Model mit "get" abfangen
Verfasst: Dienstag 24. Oktober 2023, 14:29
von noisefloor
Hallo,
ungetestet, aber eigentlich sollte das funktionieren:
Code: Alles auswählen
profile = User.objects.get(id = quelle)
if profile:
profil_id_quelle = profile.id
else:
#whatever
Gruß, noisefloor
Re: Fehler bei Zugriff auf Model mit "get" abfangen
Verfasst: Dienstag 24. Oktober 2023, 15:16
von Pitwheazle
noisefloor hat geschrieben: Dienstag 24. Oktober 2023, 14:29
Code: Alles auswählen
profile = User.objects.get(id = quelle)
if profile:
profil_id_quelle = profile.id
else:
#whatever
Das Problem ist ja, dass die erste Zeile schon einen Fehler erzeugt.
Re: Fehler bei Zugriff auf Model mit "get" abfangen
Verfasst: Dienstag 24. Oktober 2023, 15:28
von grubenfox
Pitwheazle hat geschrieben: Dienstag 24. Oktober 2023, 15:16
noisefloor hat geschrieben: Dienstag 24. Oktober 2023, 14:29
Code: Alles auswählen
profile = User.objects.get(id = quelle)
if profile:
profil_id_quelle = profile.id
else:
#whatever
Das Problem ist ja, dass die erste Zeile schon einen Fehler erzeugt.
dann möglicherweise einen Defaultwert mitgeben (ebenfalls ungetestet)
Code: Alles auswählen
profile = User.objects.get(id = quelle, default=None)
if profile is not None:
profil_id_quelle = profile.id
else:
#whatever
Re: Fehler bei Zugriff auf Model mit "get" abfangen
Verfasst: Dienstag 24. Oktober 2023, 16:07
von Pitwheazle
Ich habe das mit meinem aktuellen Code getestet:
Code: Alles auswählen
z = Zaehler.objects.get(user = profil_ziel, kategorie = q.kategorie, default = None)
if z.id == profil_ziel.id:
print(z.kategorie, z.sj, z.hj)
else:
print("Zähler mit Kategorie ", q.kategorie, " gibt es im Zielprofil nicht")
Code: Alles auswählen
Exception Value:
Cannot resolve keyword 'default' into field. Choices are: abbr_zaehler, aufgnr, fehler_zaehler, hilfe_zaehler, hinweis, hj, id, kategorie, kategorie_id, letzte, lsg_zaehler, optionen_text, richtig_of, sj, typ_anf, typ_end, user, user_id
Re: Fehler bei Zugriff auf Model mit "get" abfangen
Verfasst: Dienstag 24. Oktober 2023, 16:33
von noisefloor
Hallo,
ach so, ja.
Da `get` eine spezifschen Fehler wirft macht dann doch `try.. except` Sinn. Ungetestet:
Code: Alles auswählen
try:
profile = User.objects.get(id = quelle)
profil_id_quelle = profile.id
except User.DoesNotExist:
#whatever
Alternativ zu `get` könntet du auch mit `filter` arbeiten. Das liefert ein leeres Ergebnis, falls die Abfragebedingung nicht erfüllt wird.
Oder direkt sicherstellen, das `quelle` immer ein gültiger id-Wert ist.
Gruß, noisefloor
Re: Fehler bei Zugriff auf Model mit "get" abfangen
Verfasst: Dienstag 24. Oktober 2023, 16:34
von Pitwheazle
Danke!
Re: Fehler bei Zugriff auf Model mit "get" abfangen
Verfasst: Dienstag 24. Oktober 2023, 16:54
von sparrow
Die von @noisefloor gezeigten Variante hat den Vorteil, dass "get" gleich noch prüft, ob tatsächlich nur ein Datensatz zur Query existiert.
In der freien Wildbahn sieht man manchmal noch diese Variante:
Code: Alles auswählen
profile = User.objects.filter(id = quelle).first()
if profile:
profil_id_quelle = profile.id
else:
#whatever