Ich versuche, get_or_create für einige Felder in meinen Formularen zu verwenden, erhalte jedoch eine 500-Fehlermeldung, wenn ich dies versuche.
Eine der Zeilen sieht folgendermaßen aus:
customer.source = Source.objects.get_or_create(name="Website")
Der Fehler, den ich für den obigen Code erhalte, ist:
Cannot assign "(<Source: Website>, False)": "Customer.source"
must be a "Source" instance.
save()
ist überflüssig?create()
, Objekt erstellen und alles in einem Schritt speichern und braucht keinesave()
get_or_create
gibt ein Tupel zurück.quelle
customer.source = Source.objects.get_or_create(name="Website")[0]
customer.source, _ = Source.objects.get_or_create(name="Website")
, da dadurch die Tatsache, dass ein Tupel zurückgegeben wurde, offensichtlicher wird und zukünftige Fehler vermieden werden .get_or_create()
gibt ein Tupel zurück:created
→ hat einen booleschen Wert, wird erstellt oder nicht.customer.source
→ hat ein Objekt derget_or_create()
Methode.quelle
Nach der Antwort von @Tobu und dem Kommentar von @mipadi würde ich auf pythonischere Weise, wenn ich nicht an der erstellten Flagge interessiert wäre, Folgendes verwenden:
quelle
Das Problem, auf das Sie stoßen, ist eine dokumentierte Funktion von
get_or_create
.Bei Verwendung anderer Schlüsselwortargumente als "Standard" ist der Rückgabewert von
get_or_create
eine Instanz. Deshalb werden Ihnen die Parens im Rückgabewert angezeigt.Sie könnten verwenden
customer.source = Source.objects.get_or_create(name="Website")[0]
, um den richtigen Wert zu erhalten.Hier ist ein Link für die Dokumentation: http://docs.djangoproject.com/de/dev/ref/models/querysets/#get-or-create-kwargs
quelle