Andere haben darauf hingewiesen, dass Sie scheinen eine Liste zu haben, eine einzelne Zeichenfolge enthält, ['x1, x2']
.
Ich habe mir die Django REST Framework Interna angesehen und es gibt definitiv eine Liste zurück.
ListField erbt von Field, die einige Methoden definiert, einschließlich run_validation
, to_internal_value
und to_representation
.
Zwei dieser Methoden sind abstrakt, und eine davon, run_validation
, ruft die Validierung tatsächlich auf, indem sie self.to_internal_value(data) aufruft.
Um zu sehen, was der Validator macht, müssen wir uns die Implementierung von to_internal_value
von ListField anschauen.
Der Kommentar innerhalb von to_internal_value
sagt dies:
"""
List of dicts of native values <- List of dicts of primitive datatypes.
"""
Dann überprüft er für ungültige Eingabetypen und schließlich ruft run_validation
.
Laut meiner IDE gibt es 5 Implementierungen von run_validation
in Django REST Framework. Der relevanteste ist wahrscheinlich ListSerializer
.
Die Kommentare über ListSerializer
sagen uns, dass wir wahrscheinlich an der richtigen Stelle sind:
# There's some replication of `ListField` here,
# but that's probably better than obfuscating the call hierarchy.
Die ListSerializer
Klasse validates each item (source) und dann auf eine Liste anhängt es genannt ret
. Also sollten wir eine Liste zurückgeben.
Das ungelöste Teil des Puzzles ist hier, was Ihre Eingabe ist, verursacht die Ausgabe falsch sein, aber durch die Aufrufliste verfolgen, scheint der Code wie vorgesehen funktioniert.
EDIT:
Könnte es sein, dass to_representation Ihre Liste ist Abflachung, weil es es ist ein Wörterbuch denkt?
Verwenden Sie Django? Wo ist valided_data definiert? Das gibt einen Hinweis darauf, was der Rückgabetyp dieser Methode ist. – Moshe
Es stimmt, Listen haben keine Aufteilung. Nur Strings tun. – BallpointBen
Welchen Rahmen verwenden Sie? Sie sprechen über ListSerializer ... ist das Django-Rest-Framework? – SpoonMeiser