Как точно сериализовать и создать пользовательского пользователя с помощью drf

Я не могу создать пользователя, обращаясь к конечной точке со следующим запросом "http://127.0.0.1:8000/users/" со следующим телом запроса

{ "user": { "first_name": "test100", "last_name": "last100", "email": "user100@gmail.com", "username": "user100", "status": "активен", "contact": 1234567890 }, "пароль": "test_pass_@100" }

Я получаю исключение при сохранении сериализатора (serializer.save()), в чем проблема. неправильная ли обработка сериализации?

class User(AbstractUser):
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)
    email = models.EmailField(max_length=255, unique=True)
    username = models.CharField(max_length=255, unique=True, blank=True, null=True)
    profile_image = models.ImageField(upload_to='image/%Y/%m/%d', blank=True, null=True)
    status = models.CharField(max_length=255, blank=True, null=True)
    contact = PhoneNumberField(blank=True, null=True)
    is_staff = models.BooleanField(default=False, blank=True, null=True)
    is_active = models.BooleanField(default=True, blank=True, null=True)

    def find_by_username(self, name):
        return self.objects.filter(username=name)

    def find_by_id(self, id):
        return self.objects.filter(id=id)

А это мой views.py

class UserViewSet(viewsets.ViewSet):

    def list(self, request):
        try:
            queryset = User.objects.all()
            serializer = UserResponseSerializer(queryset, many=True)
            return HttpResponse(json.dumps(serializer.data), content_type="application/json")
        except:
            return HttpResponse(status=404)

    @swagger_auto_schema(request_body=UserRegistrationRequsetSerializer)
    def create(self, request, *args, **kwargs):
        try:
            serializer = UserRegistrationRequsetSerializer(data=request.data)
            if serializer.is_valid():
                serializer.save()
                return HttpResponse(serializer.data)
            else:
                return HttpResponse("Not valid")
        except:
            return HttpResponse(status=404)

    def retrieve(self, request, pk=None):
        queryset = User.objects.all()
        user = get_object_or_404(queryset, pk=pk)
        serializer = UserResponseSerializer(user)
        return HttpResponse(serializer.data)

    def update(self, request, pk=None):
        pass

    def partial_update(self, request, pk=None):
        pass

    def destroy(self, request, pk=None):
        pass

это мой файл seralizer.py

from rest_framework import serializers


class UserResponseSerializer(serializers.Serializer):
    first_name = serializers.CharField(max_length=255, required=True, allow_blank=False)
    last_name = serializers.CharField(required=True, allow_blank=False, max_length=255)
    email = serializers.EmailField(max_length=255, required=True, allow_blank=False)
    username = serializers.CharField(max_length=255, required=True, allow_blank=False)
    profile_image = serializers.ImageField(required=False)
    status = serializers.CharField(max_length=255, allow_blank=True)
    contact = serializers.IntegerField()


class UserRegistrationRequsetSerializer(serializers.Serializer):
    user = UserResponseSerializer(required=True)
    password = serializers.CharField(required=True, max_length=255, allow_blank=False)

    def create(self, validated_data):
        user = super().create(validated_data)
        user.set_password(validated_data['password'])
        user.save()
        return user

Редактирование UserRegistrationRequestSerializer:

 class UserRegistrationRequestSerializer(serializers.Serializer):
    user = UserResponseSerializer(required=True)
    password = serializers.CharField(required=True, max_length=255, allow_blank=False)

    def create(self, validated_data):
        user = User.objects.create(**validated_data['user'])
        user.set_password(validated_data['password'])
        user.save()
        return user
Вернуться на верх