Запрос id в почтовом запросе возвращает none

Я пытаюсь создать приложение для социальных сетей на Django с использованием базы данных mongo, где пользователи могут регистрироваться и следить/отслеживать друг друга.

Вот код для models.py

from django.db import models
import uuid
from datetime import datetime
from django.contrib.auth.models import AbstractUser
from django.contrib.auth import get_user_model

# Create your models here.

class User(AbstractUser):
    username = models.CharField(max_length=255, unique=True)
    email = models.CharField(max_length=255, unique=True)
    password = models.CharField(max_length=255)

class FollowersCount(models.Model):
    follower = models.CharField(max_length=100)
    user = models.CharField(max_length=100)

Вот код для views.py

# sign in
class LoginView(APIView):
    def post(self, request):
        email = request.data['email']
        password = request.data['password']

        user = User.objects.filter(email=email).first()

        if user is None:
            raise AuthenticationFailed('User not found!')

        if not user.check_password(password):
            raise AuthenticationFailed('Incorrect password!')

        payload = {
            'id': user.id,
            'exp': datetime.datetime.utcnow() + datetime.timedelta(minutes=60),
            'iat': datetime.datetime.utcnow()
        }

        token = jwt.encode(payload, 'secret', algorithm='HS256')

        response = Response()

        response.set_cookie(key='jwt', value=token, httponly=True)
        response.data = {
            'jwt': token
        }
        return response

# logged in user follows / unfollows user based on id 
class FollowView(APIView):
    def post(self, request):
        token = request.COOKIES.get('jwt')

        if not token:
            raise AuthenticationFailed('Unauthenticated!')

        try:
            payload = jwt.decode(token, 'secret', algorithms=['HS256'])
        except jwt.ExpiredSignatureError:
            raise AuthenticationFailed('Unauthenticated!')

        follower = User.objects.filter(id=payload['id']).first() 
        print(follower)

        if request.method == 'POST':
            user = request.POST.get('id')
        user_followed = user
        print(user_followed)
        response = Response()

        if FollowersCount.objects.filter(follower=follower, user=user_followed).first():
            delete_follower = FollowersCount.objects.get(follower=follower, user=user_followed)
            delete_follower.delete()
            response.data = {
                'message': str(follower) + ' removed ' + str(user)
            }
            return response 
        else:
            new_follower = FollowersCount.objects.create(follower=follower, user=user_followed)
            new_follower.save()
            response.data = {
                'message': str(follower) + ' followed ' + str(user)
            }
            return response 

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

if request.method == 'POST':
            user = request.POST.get('id')
        user_followed = user
        print(user_followed)

error:

Вот как выглядит мой POST-запрос postman для http://127.0.0.1:8000/api/follow:

{
    "jwt": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MiwiZXhwIjoxNjc0MjkxNTI5LCJpYXQiOjE2NzQyODc5Mjl9.SvBHTe5hxuDzWrNeLQJq6JudMo9i6k1GQI-Ndi_ODgg",
    "id": "2"
}

Здесь jwt - это токен входящего пользователя, а id - идентификатор пользователя, за которым нужно следить. Почему id пользователя, за которым нужно следить, отсутствует в выводе на консоль?

Любая помощь будет оценена по достоинству. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Вы получаете ошибку здесь:

new_follower = FollowersCount.objects.create(follower=follower, user=user_followed)
new_follower.save() <----

Тогда вопрос: почему?

Что ж, если взглянуть на ваши модели, вы используете CharField вместо ForeignKey для своих пользователей:

    follower = models.CharField(max_length=100)
    user = models.CharField(max_length=100)

Но, когда вы пытаетесь создать новый объект FollowersCount, вы передаете объект User в follower и user, который, очевидно, не является значением, совместимым с CharField: отсюда и ошибка.

Вам следует преобразовать ваши CharFields в ForeignKeys:

class FollowersCount(models.Model):
    follower = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
    user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)

Теперь, когда вы создаете новый объект FollowersCount, он будет принимать объекты User, которые вы ему передаете, потому что теперь он будет ForeignKey, а не CharField.

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