Quiero aclarar la documentación proporcionada django-rest-framework
sobre la creación de un objeto modelo. Hasta ahora encontré que hay 3 enfoques sobre cómo manejar tales eventos.
El
create()
método del serializador . Aquí está la documentaciónclass CommentSerializer(serializers.Serializer): def create(self, validated_data): return Comment.objects.create(**validated_data)
El
create()
método ModelViewset . Documentaciónclass AccountViewSet(viewsets.ModelViewSet): queryset = Account.objects.all() serializer_class = AccountSerializer permission_classes = [IsAccountAdminOrReadOnly]
El
perform_create()
método ModelViewset . Documentaciónclass SnippetViewSet(viewsets.ModelViewSet): def perform_create(self, serializer): serializer.save(owner=self.request.user)
Estos tres enfoques son importantes según el entorno de su aplicación.
Pero, ¿CUÁNDO necesitamos usar cada create() / perform_create()
función? Por otro lado, encontré una cuenta de que se llamaron dos métodos de creación para una sola solicitud de publicación del modelviewset create()
y del serializador create()
.
Espero que alguien comparta algunos de sus conocimientos para explicarlo y esto seguramente será muy útil en mi proceso de desarrollo.
create(self, validated_data)
serializador, ¿significa que se centra en la lógica de validación de datos? y más, puede ayudar a devolver los datos del serializador dado a la respuesta, ¿verdad?create
función en el propio serializador es única llamada cuando lo haceserializer.save()
. En elcreate(self, request)
interior de la función (AccountViewSet
), usted no está llamandoserializer.save()
a todos y, por lo tanto, la única creación de la instancia que está pasando con esta llamada:Account.objects.create_user(**serializer.validated_data)
.