Ich habe zwei Modelle, eines mit M2M-Beziehung und einen verwandten Namen. Ich möchte alle Felder in den Serializer und das zugehörige Feld einfügen.
models.py:
%Vor%serializer.py:
%Vor%Dies funktioniert, aber es enthält das zugehörige Feld nicht.
%Vor%Das funktioniert genau so, wie ich es möchte, aber was passiert, wenn das Toppings-Modell viele Felder hat. Ich möchte etwas tun wie:
%Vor%Diese Syntax führt zu einem Fehler, der besagt:
Der Feldname
nicht gültig__all__
ist für Modell
Gibt es eine Möglichkeit, das gewünschte Verhalten zu erreichen? Oder die Felder müssen manuell eingegeben werden, wenn Sie einen verwandten Namen verwenden?
Ich habe gerade den Quellcode von Django Rest Framework überprüft. Das gewünschte Verhalten scheint im Framework nicht unterstützt zu werden.
Die Option fields
muss eine Liste, ein Tupel oder der Text __all__
sein.
Hier ist ein Ausschnitt des relevanten Quellcodes:
%Vor%Sie können ' all ' nicht zusätzlich zum Tupel oder der Liste mit Feldern hinzufügen ...
Wie @DanEEStart sagte, DjangoRestFramework habe keine einfache Möglichkeit, den ' all ' Wert für Felder zu erweitern, da die get_field_names
-Methoden so entworfen zu sein scheinen So funktioniert .
Aber glücklicherweise können Sie diese Methode überschreiben, um einen einfachen Weg zu ermöglichen, alle Felder und Relationen aufzunehmen, ohne eine Unmenge von Feldern aufzählen zu müssen.
Ich überschreibe diese Methode wie folgt:
%Vor% Beachten Sie, dass diese Methode nur das Verhalten dieses Serializers ändert und das extra_fields
-Attribut nur für diese Serialisierungsklasse funktioniert.
Wenn Sie so viele Serializer haben, können Sie eine Zwischenklasse erstellen, um diese get_fields_names
-Methode an einer Stelle einzufügen und mehrfach zu verwenden. Manche mögen das:
Ein altes Problem, aber dachte, dass dies anderen in der Zukunft helfen könnte.
Ich habe gerade ein ähnliches Problem festgestellt und die Option all aktiviert, indem ich ein zusätzliches Feld wie im folgenden Beispiel manuell angegeben habe. Ich bin mir nicht sicher, ob dies auch Ihr Problem lösen würde. Es ist ein verdammt sauberer Anblick als alles, was ich bisher gesehen habe.
%Vor%Ich würde annehmen, dass dies für alle anderen verwandten Feldoptionen funktionieren würde, die auf derselben Seite aufgeführt sind: Ссылка
Ich benutze das Django Rest Framework Version 3.6.2
Umgekehrtes Beziehungsbeispiel wie angefordert:
%Vor%Tags und Links django django-models django-rest-framework