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):
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 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!!!!!!!!!'},
,