Сериализация JSON для следующего пользователя

У меня есть файл model.py, как показано ниже.

class User(AbstractUser):
    pass

    def serialize(self):
        return {
            "userid" : self.user.id,
            "username": self.username
        }
    
    def __str__(self):
        return f"{self.id} {self.username}"

class Profile(models.Model):
    id =  models.AutoField(primary_key=True)
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="user_profile")
    follower = models.ManyToManyField(User, blank=True, related_name="following")
    
    def __str__(self):
        return f"{self.user.username}"
    
    def serialize(self):
        return {
            "user_id": self.user.id,
            "user": self.user.username,
            "followers": self.follower.count(),
            "followers_usr": [user.username for user in self.follower.all()],
            "following": self.user.following.count(),
            "following_usr": [user.username for user in self.user.following.all()]
        }

Я хочу создать страницу профиля, на которой будет отображаться профиль пользователя, количество подписчиков и подписчиков, а также список пользователей в подписчиках и подписчиках. Я использую возврат JsonResponse в моем файле views.py.

Все работает хорошо, пока не появится «following_usr».

Я попробовал использовать "following_usr": self.user.following.all() и получил эту ошибку: TypeError at /profile/1 Объект типа QuerySet не является JSON сериализуемым

Когда я пытаюсь "following_usr": [user.username for user in self.user.following.all()] получить эту ошибку: AttributeError at /profile/1 Объект 'Profile' не имеет атрибута 'username'

Как правильно это сделать?

Ошибка возникает из-за того, что self.user.following.all() возвращает QuerySet, который не является JSON-сериализуемым.

P.S. Я только сейчас заметил, что происходит на самом деле, думаю, вы можете попробовать следующее:

class Profile(models.Model):
    # ... other fields ...

    def serialize(self):
        return {
            "user_id": self.user.id,
            "user": self.user.username,
            "followers": self.follower.count(),
            "followers_usr": [user.username for user in self.follower.all()],
            "following": self.user.following.count(),
            "following_usr": [self.user.username for user in self.user.following.all()]
        }
Вернуться на верх