@dert2313

Как реализовать проверку в методе get_is_subscribed через related_name?

Модель подписки
class Follow(models.Model):
    user = models.ForeignKey(
        User,
        related_name='follower',
        on_delete=models.CASCADE
    )
    author = models.ForeignKey(
        User,
        related_name='following',
        on_delete=models.CASCADE
    )

сериализатор с методом
class UserFollowSerializer(serializers.ModelSerializer):
    is_subscribed = serializers.SerializerMethodField()
    recipes = UserRecipeSerializer(many=True, read_only=True)
    recipes_count = serializers.SerializerMethodField()

    class Meta:
        model = User
        fields = (
            'email',
            'id',
            'username',
            'first_name',
            'last_name',
            'is_subscribed',
            'recipes',
            'recipes_count'
        )

    def get_is_subscribed(self, obj):
        return obj.following.filter(user=self.context['user']).exists()
  • Вопрос задан
  • 621 просмотр
Решения вопроса 1
@korid24
Возможно, вам бы упростило жизнь (не только в этом конкретном случаем) добавление м2м связи модели юзера самой на себя по типу
class User:
    ...
    subscriptions = models.ManyToManyField('self', related_name='followers', symmetrical=False)


тогда было бы
def get_is_subscribed(self, obj):
    return self.context['user'] in obj.followers.all()
   # или obj.follower.filter(id=self.context['user'].id).exists()


если модель Follow всё ещё нужна как промежуточная таблица - можно добавить атрибутом through в ManyToManyField
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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