Ich habe ein Buchmodell mit einem Fremdschlüssel für den Benutzer (den Eigentümer des Buches):
%Vor%Ich habe ein ModelViewSet für Book erstellt, das die Bücher des angemeldeten Benutzers anzeigt:
%Vor%Um nun ein neues Buch zu erstellen, möchte ich das Benutzerfeld mit request.user speichern, nicht mit Daten, die vom Rest-Client gesendet werden (für mehr Sicherheit). zum Beispiel:
%Vor%aber ich habe diesen Fehler: Diese QueryDict-Instanz ist unveränderbar. (bedeutet request.DATA ist ein unveränderliches QueryDict und kann nicht geändert werden)
Kennen Sie eine bessere Möglichkeit, zusätzliche Felder hinzuzufügen, wenn Sie ein Objekt mit dem django rest framework erstellen?
Aktualisieren : Seit v3 müssen Sie dies tun:
%Vor%Das Prinzip bleibt gleich.
Sie möchten das owner
-Feld Ihres Buch-Serialisators schreibgeschützt machen und dann die Verknüpfung mit dem Benutzer in pre_save()
festlegen.
Etwas wie:
%Vor%Siehe den Tutorial-Abschnitt "Snippets zuordnen mit Benutzern ".
Ich hoffe, das hilft.
Was es wert ist, hat sich in Django REST Framework 3 geändert. Es gibt jetzt einen perform_create()
, der die älteren pre_save()
und post_save()
Haken ersetzt, die in einer vorherigen Antwort vorgeschlagen wurden. Zum Beispiel:
Hoffe, das spart jemandem Zeit.
Wenn Sie ModelSerializer
verwenden, ist es so einfach wie die Methode restore_object()
zu implementieren:
restore_object()
wird verwendet, um ein Verzeichnis von Attributen in eine Objektinstanz zu deserialisieren. ModelSerializer
implementiert diese Methode und erstellt / aktualisiert die Instanz für das Modell, das Sie in der Klasse Meta
angegeben haben. Wenn die angegebene instance
None
ist, bedeutet dies, dass das Objekt noch erstellt werden muss. In diesem Fall setzen Sie einfach das Feld user
mit dem gewünschten Wert.
Weitere Informationen: Ссылка
Tags und Links python django rest django-rest-framework