Поле 'id' ожидается как число
Я определил свою пользовательскую модель пользователя следующим образом (чтобы иметь email в качестве имени пользователя):
class User(AbstractUser):
username = None
email = models.EmailField(unique=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
objects = UserManager()
def __str__(self):
return self.email
И Profile
модель в api
приложении, как показано ниже:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
verified = models.BooleanField(default=False)
def __str__(self):
return self.user.email
Это серилизатор:
class ProfileSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = ['user', 'verified']
И вид:
@api_view(['POST'])
def get_user(request):
email = request.data['email']
user = Profile.objects.get(user=email)
serializer = ProfileSerializer(user)
return Response(serializer.data)
Но когда я вызываю get_user
и отправляю в него email=myuser@mydomain.com
, я получаю следующее:
ValueError at /api/get/
Field 'id' expected a number but got 'myuser@mydomain.com'.
это потому, что user
является внешним ключом, который связан с id пользователя. Если вам нужно отфильтровать по электронной почте пользователя, вам нужно переписать запрос следующим образом Profile.objects.get(user__email=email)
:
@api_view(['POST'])
def get_user(request):
email = request.data['email']
user = Profile.objects.get(user__email=email)
serializer = ProfileSerializer(user)
return Response(serializer.data)
Подробнее о фильтрации по связанному объекту смотрите здесь.