Ошибка значения при регистрации пользователя в Django
В моем мобильном приложении, когда я пытаюсь зарегистрировать пользователя в бэкенде Django, я получаю "ValueError: Cannot query "user@example.com": Должен быть экземпляр "User"."
Вот сериализатор (django):
class UserSerializer(serializers.ModelSerializer):
friends = serializers.SerializerMethodField()
class Meta:
model = User
fields = ['id', 'name', 'email', 'date', 'password', 'profile_picture', 'friends']
extra_kwargs = {'password': {'write_only': True, 'required': True}}
def get_friends(self, obj):
return [friend.email for friend in obj.get_friends()]
def create(self, validated_data):
user = User.objects.create_user(**validated_data)
user.save()
print(user)
print(type(user))
Token.objects.get_or_create(user=user)
print("user created")
return user
Вот react native, в котором я отправляю post-запрос на сервер.
const [name, setName] = useState('');
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const onChange = (field, value) => {
if (field === 'name') setName(value);
else if (field === 'email') setEmail(value);
else if (field === 'password') setPassword(value);
};
const onSubmit = async () => {
try {
let response = await fetch('http://localhost:8000/api/users', {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: name,
email: email,
password: password,
}),
});
let json = await response.json();
console.log("JSON response:", json);
if (response.status === 201) {
// Registration successful
// You can dispatch a success action here
console.log("Registration Successful");
} else {
// Registration failed
// You can dispatch a failure action here
console.log("Registration failed", json);
}
} catch (error) {
console.error(error);
}
};
Вот представление, в котором выполняется запрос.
class UserView(APIView):
def post(self, request):
print(request.data)
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
print("serializer is valid")
serializer.save()
token = Token.objects.get(user_id=serializer.data.get('id'))
return Response(data={'token': token.key}, status=status.HTTP_201_CREATED)
else:
print("serializer is not valid")
print(serializer.errors)
return Response(data=serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Проблем с отправкой POST-запроса нет, сервер получает post-запрос по нужному url. Проблема заключается в методе create сериализатора.