What is the difference between .post () ,. create () and perform_create () in views.py and .create () in serializers.py

I got confused with .post()both .create()and perform_create()in and in views.pyand .create()in serializers.py
seems .create()to serializers.pyget validated_data, so he cannot checkserializer.is_valid

Here serializers.py:

class PostListSerializer(ModelSerializer):
    class Meta:
        model = Post
        fields = [
            'title',
            'content',
            'publish',
        ]

    def create(self, validated_data):
        print("-------------------")
        print("5555555 - create", validated_data)
        return Post.objects.create(**validated_data)

And if my code is:

views.py

class TestPostListAPIView(ListCreateAPIView):
    queryset = Post.objects.all()
    serializer_class = PostListSerializer

    def post(self, request, *args, **kwargs):
        serializer = PostListSerializer(data=request.data)
        if not serializer.is_valid(raise_exception=False):
            # deal with serializer.errors
            return Response({'[post]custome error 1 !!!!!!!!!'}, status=status.HTTP_400_BAD_REQUEST)
        else:
            print("[post]- serializer.validated_data ", serializer.validated_data)
            serializer.save()
        return Response({'[post]Create success'}, status=status.HTTP_201_CREATED)

the process will be .post()in views.py.create()in serializers.py→ the Responseclient

If my view.py uses:

class TestPostListAPIView(ListCreateAPIView):
    queryset = Post.objects.all()
    serializer_class = PostListSerializer

    # def post(self, request, *args, **kwargs):
    #     serializer = PostListSerializer(data=request.data)
    #     if not serializer.is_valid(raise_exception=False):
    #         # deal with serializer.errors
    #         return Response({'[post]custome error 1 !!!!!!!!!'}, status=status.HTTP_400_BAD_REQUEST)
    #     else:
    #         print("[post]- serializer.validated_data ", serializer.validated_data)
    #         serializer.save()
    #     return Response({'[post]Create success'}, status=status.HTTP_201_CREATED)

    def create(self, request, *args, **kwargs):
        serializer = self.get_serializer(data=request.data)
        print("44444-1 perform_create ", serializer)
        if not serializer.is_valid(raise_exception=False):
            print("44444-3 serializer.is_valid() ", serializer.is_valid())
            return Response({'custome error!!!!!!!!!'}, status=status.HTTP_400_BAD_REQUEST)
        else:
            print("44444-7 serializer.validated_data ", serializer.validated_data)
        self.perform_create(serializer)
        return Response({ 'Create success'}, status=status.HTTP_201_CREATED)

    def perform_create(self, serializer):
        print("1111-1 perform_create ", serializer)
        if not serializer.is_valid(raise_exception=False):
            print("1111-3 serializer.is_valid() ", serializer.is_valid())
            return Response({'custome error!!!!!!!!!'}, status=status.HTTP_400_BAD_REQUEST)
        else:
            print("1111-7 serializer.validated_data ", serializer.validated_data)
        user = User.objects.filter(id=8)
        serializer.save(user=user.first())
        print("1111-8 perform_create ")

process .create()in views.py.perform_create()in views.py.create()in serializers.py→ to the Responseclient

!
, , .perform_create() , .create(), , .perform_create() serializer.is_valid(),

, .post() .create() views.py, .post() .create() plus .perform_create()
, custome, {'custome error!!!!!!!!!'}, ,

+6
1

perform_create :

, , . , URL.

0

Source: https://habr.com/ru/post/1660462/


All Articles