Django REST Framework: Unique_together Validierung auf Serialisierungsprogramme
Probleme mit einem serializer.is_valid()
Rückkehr True
wenn der serializer-Instanz schlägt fehl, ein unique_together
Einschränkung auf der Modell-Seite.
Gibt es eine Möglichkeit für mich geben Sie in den serializer zur Durchsetzung einer unique_together
Einschränkung?
- Können Sie das Modell in Frage?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Leider, Andreas, die Antwort ist nicht ganz vollständig, da dies nicht funktionieren wird im Falle eines Updates.
Stattdessen würden Sie wollen etwas, das mehr wie:
Dieser Arbeit wird für PUT, PATCH und POST.
.exists()
zu tun, anstatt eine gerade-up bekommen? nicht sicher, was die Auswirkungen von nicht die überprüfung der IDs tun würdeobjects.filter(field1=field1, field2=field2).exists()
Im Fall, dass Sie aktualisieren ein Objekt obwohl, ein passendes Objekt vorhanden - die eine, die Sie aktualisieren, was, die id-Vergleich ist über.Den ModelSerializer-Klasse hat diese Funktion build-in, mindestens in
djangorestframework>=3.0.0
jedoch, wenn Sie mit einemserializer
die nicht enthält alle der Felder, die betroffen sind von Ihremunique_together
beschränken, dann erhalten Sie eineIntegrityError
beim speichern einer Instanz, die gegen es. Zum Beispiel mit dem folgenden Modell:und die folgenden serializer und ViewSet:
wenn Sie versuchen, speichern Sie zwei Instanzen mit dem gleichen
foo_a
undfoo_b
gesetzt haben, erhalten Sie eineIntegrityError
. Allerdings, wenn wir ändern das Serialisierungsprogramm wie diese:du erhälst dann einen richtigen
HTTP 400 BAD REQUEST
status-code und die entsprechenden JSON-beschreibende Nachricht in der Antwort der Körper:Ich hoffe, dass dieses Ergebnis für Sie hilfreich, auch wenn dies eine etwas alte-Frage gepostet 😉
Ich Brauchte das zum überschreiben der Standard-Nachricht. Löste es, indem diese.
Similarly you can specify fields
Ja, Sie können tun es in der
.validate()
Methode der serializer.Die unique-Einschränkung, die Sie in Ihrem Modell ist für die Erstellung von Datenbank-constraints, die nicht für die Validierung.
Hatte das gleiche problem und diese Antwort https://stackoverflow.com/a/26027788/6473175 ich war in der Lage, es zu arbeiten, aber benutzen musste
self.instance
stattself.object
.Gut, das ist irgendwie dumm und es ist sehr unwahrscheinlich, dass jemand, aber mich würde diese Fehler machen, aber ich hatte das gleiche Modell in zwei serialisierungsprogramme Klasse, als Folge hatte ich dieses problem
Hoffe, dass meine Fehler jemand helfen!