Поле '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)

Подробнее о фильтрации по связанному объекту смотрите здесь.

Вернуться на верх