Хочу пояснить данную документацию django-rest-framework
по созданию объекта модели. Пока что я обнаружил, что есть 3 подхода к обработке таких событий.
Метод сериализатора
create()
. Вот документацияclass CommentSerializer(serializers.Serializer): def create(self, validated_data): return Comment.objects.create(**validated_data)
Метод ModelViewset
create()
. Документацияclass AccountViewSet(viewsets.ModelViewSet): queryset = Account.objects.all() serializer_class = AccountSerializer permission_classes = [IsAccountAdminOrReadOnly]
Метод ModelViewset
perform_create()
. Документацияclass SnippetViewSet(viewsets.ModelViewSet): def perform_create(self, serializer): serializer.save(owner=self.request.user)
Эти три подхода важны в зависимости от среды вашего приложения.
Но КОГДА нам нужно использовать каждую create() / perform_create()
функцию ??. С другой стороны, я обнаружил некоторую учетную запись, в которой для одного запроса на публикацию вызывались два метода создания - набор моделей create()
и сериализатор create()
.
Надеюсь, кто-нибудь поделится своими знаниями, чтобы объяснить, и это, безусловно, будет очень полезно в моем процессе разработки.
create(self, validated_data)
касается сериализатора, это означает, что он фокусируется на логике проверки данных? и более того, это может помочь вернуть данные сериализатора обратно в ответ, верно?create
функция в самом сериализаторе вызывается только тогда, когда вы это делаетеserializer.save()
. В вашейcreate(self, request)
функции внутри (AccountViewSet
), вы не вызываяserializer.save()
вообще и , следовательно, только создание экземпляра происходит с этим вызовом:Account.objects.create_user(**serializer.validated_data)
.