Регистрация создает пользователя, но получает ошибку 'Недопустимая строка формата'

Пытаюсь понять, что не так с моим представлением/сериализатором подписки.

Когда я регистрируюсь, новый пользователь создается, однако я получаю сообщение об ошибке:

Invalid format string 

с сообщением 500 internal Server Error

вот моя конечная точка api:

path('api/register', RegisterApi.as_view()),

Это мой RegisterApi:

class RegisterApi(generics.GenericAPIView):
    serializer_class = RegisterSerializer
    #remove this if it doesn't work
    authentication_classes = (TokenAuthentication,)
    permission_classes = (AllowAny,)
    def post(self, request, *args,  **kwargs):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        user = serializer.save()
        return Response({
            "user": UserSerializer(user, context=self.get_serializer_context()).data,
            "message": "User Created Successfully.  Now perform Login to get your token",
        })

а это мой RegisterSerializer:

class RegisterSerializer(serializers.ModelSerializer):
    city = serializers.CharField(source='profile.city', required=False)
    country = serializers.CharField(source='profile.country', required=False)
    profile_pic = serializers.ImageField(source='profile.profile_pic', required=False)
    is_online = serializers.BooleanField(source='profile.is_online', required=False)
    is_active = serializers.BooleanField(source='profile.is_active', required=False)
    class Meta:
        model = User
        #removed url from fields
        fields = ['username', 'email', 'password', 'first_name', 'last_name', 'city', 'country', 'profile_pic', 'is_online', 'is_active']
        extra_kwargs = {
            'password': {'write_only': True},
        }
        def create(self,validated_data):
            user = User.objects.create_user(
                                            username=validated_data['username'],
                                            first_name=validated_data['first_name'],
                                            last_name=validated_data['last_name'],
                                            email=validated_data['email'])
            user.set_password(validated_data['password'])
            user.save()
            #added fields from profile
            user.profile.city = validated_data['city']
            user.profile.country = validated_data['country']
            user.profile.bio = validated_data['bio']
            return user

После дальнейшего изучения исключение, похоже, как-то связано с полем datetime. Вот полный отслеживание:

Просмотрел ваш код бегло и внимательно его не изучал. Поэтому, возможно, я не прав в своем предположении.

Возможно, вы слишком глубоко отступили для метода create.

Вместо этого.

class RegisterSerializer(serializers.ModelSerializer):
    city = serializers.CharField(source='profile.city', required=False)
    country = serializers.CharField(source='profile.country', required=False)
    profile_pic = serializers.ImageField(source='profile.profile_pic', required=False)
    is_online = serializers.BooleanField(source='profile.is_online', required=False)
    is_active = serializers.BooleanField(source='profile.is_active', required=False)
    class Meta:
        model = User
        #removed url from fields
        fields = ['username', 'email', 'password', 'first_name', 'last_name', 'city', 'country', 'profile_pic', 'is_online', 'is_active']
        extra_kwargs = {
            'password': {'write_only': True},
        }
        def create(self,validated_data):
            user = User.objects.create_user(
                                            username=validated_data['username'],
                                            first_name=validated_data['first_name'],
                                            last_name=validated_data['last_name'],
                                            email=validated_data['email'])
            user.set_password(validated_data['password'])
            user.save()
            #added fields from profile
            user.profile.city = validated_data['city']
            user.profile.country = validated_data['country']
            user.profile.bio = validated_data['bio']
            return user

Вы можете попробовать это

class RegisterSerializer(serializers.ModelSerializer):
    city = serializers.CharField(source='profile.city', required=False)
    country = serializers.CharField(source='profile.country', required=False)
    profile_pic = serializers.ImageField(source='profile.profile_pic', required=False)
    is_online = serializers.BooleanField(source='profile.is_online', required=False)
    is_active = serializers.BooleanField(source='profile.is_active', required=False)
    class Meta:
        model = User
        #removed url from fields
        fields = ['username', 'email', 'password', 'first_name', 'last_name', 'city', 'country', 'profile_pic', 'is_online', 'is_active']
        extra_kwargs = {
            'password': {'write_only': True},
        }
    def create(self,validated_data):
        user = User.objects.create_user(
                                        username=validated_data['username'],
                                        first_name=validated_data['first_name'],
                                        last_name=validated_data['last_name'],
                                        email=validated_data['email'])
        user.set_password(validated_data['password'])
        user.save()
        #added fields from profile
        user.profile.city = validated_data['city']
        user.profile.country = validated_data['country']
        user.profile.bio = validated_data['bio']
        return user
Вернуться на верх