Регистрация создает пользователя, но получает ошибку 'Недопустимая строка формата'
Пытаюсь понять, что не так с моим представлением/сериализатором подписки.
Когда я регистрируюсь, новый пользователь создается, однако я получаю сообщение об ошибке:
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