@stayHARD

Как правильно сериализовать объект в данном случае?

Здравствуйте.
Пытаюсь просериализовать несколько объектов(юзеров) используя django rest framework и его сериализаторы.
Сейчас данный код выглядит вот так:
class UserSearchSerializer(serializers.ModelSerializer):
    info = UserProfileSerializer(many=True, read_only=True)
    follow = serializers.SerializerMethodField('check_follow')
    like = serializers.SerializerMethodField('check_like')
 
    def check_follow(self, obj):
        user_id = self.context.get("user_id")
        user_has_followed = False
        try:
            user_has_followed = bool(Follow.objects.filter(user_who_follow_id=user_id))
        except Exception:
            raise user_has_followed
        return user_has_followed
 
    def check_like(self, obj):
        user_id = self.context.get("user_id")
        user_has_like = False
        try:
            user_has_like = bool(Like.objects.filter(user_who_like_id=user_id))
        except Exception:
            raise user_has_like
        return user_has_like
 
    class Meta:
        model = User
        fields = ('id', 'username', 'first_name', 'last_name', 'email', 'info', 'follow', 'like')

Но при сериализации объектов отдает одно и тоже значение для всех(поля: like/follow)
Тоесть если у одного юзера с другим есть отношения "фоллов", то сериалайзер вернет всем юзерам true в этом поле. Что я упускаю?
  • Вопрос задан
  • 640 просмотров
Решения вопроса 1
@stayHARD Автор вопроса
class UserSearchSerializer(serializers.ModelSerializer):
    info = UserProfileSerializer(many=True, read_only=True)
    follow = serializers.SerializerMethodField('check_follow')
    like = serializers.SerializerMethodField('check_like')

    def check_follow(self, obj):
        user_id = self.context.get("user_id")
        user_has_followed = False
        try:
            user_has_followed = Follow.objects.filter(user_who_follow_id=user_id,
                                                      user_whom_follow_id=obj).exists()
        except Exception:
            raise user_has_followed
        return user_has_followed

    def check_like(self, obj):
        user_id = self.context.get("user_id")
        user_has_like = False
        try:
            user_has_like = Like.objects.filter(user_who_like_id=user_id,
                                                user_whom_like_id=obj).exists()
        except Exception:
            raise user_has_like
        return user_has_like

    class Meta:
        model = User
        fields = ('id', 'username', 'first_name', 'last_name', 'email', 'info', 'follow', 'like')
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы