Ich möchte die gegebene Dokumentation django-rest-framework
bezüglich der Erstellung eines Modellobjekts klarstellen . Bisher habe ich festgestellt, dass es drei Ansätze gibt, wie man mit solchen Ereignissen umgeht.
Die
create()
Methode des Serializers . Hier ist die Dokumentationclass CommentSerializer(serializers.Serializer): def create(self, validated_data): return Comment.objects.create(**validated_data)
Die ModelViewset-
create()
Methode. Dokumentationclass AccountViewSet(viewsets.ModelViewSet): queryset = Account.objects.all() serializer_class = AccountSerializer permission_classes = [IsAccountAdminOrReadOnly]
Die ModelViewset-
perform_create()
Methode. Dokumentationclass SnippetViewSet(viewsets.ModelViewSet): def perform_create(self, serializer): serializer.save(owner=self.request.user)
Diese drei Ansätze sind abhängig von Ihrer Anwendungsumgebung wichtig.
Aber wann müssen wir jede create() / perform_create()
Funktion verwenden? Auf der anderen Seite fand ich einen Bericht, dass zwei Erstellungsmethoden für eine einzelne Post-Anfrage des Modelviewset create()
und des Serializers aufgerufen wurden create()
.
Hoffentlich würde jeder etwas von seinem Wissen teilen, um es zu erklären, und dies wird sicherlich sehr hilfreich in meinem Entwicklungsprozess sein.
create(self, validated_data)
im Serializer bedeutet es, dass es sich auf Datenvalidierungslogik konzentriert? und darüber hinaus kann es helfen, die Daten des angegebenen Serializers wieder auf die Antwort zurückzuführen, oder?create
Funktion im Serializer selbst wird also nur aufgerufen, wenn Sie dies tunserializer.save()
. In Ihrercreate(self, request)
Funktion inside (AccountViewSet
) rufen Sie überhaupt nichtserializer.save()
auf, und daher erfolgt die einzige Instanzerstellung mit diesem Aufruf :Account.objects.create_user(**serializer.validated_data)
.