Я пытаюсь проверить, существуют ли следующие отношения с помощью запроса.Сначала я получаю всех подписчиков, которые есть у пользователя, а затем проверяю, следует ли пользователь за этими подписчиками.Вот мои модели:
class Following(models.Model):
target = models.ForeignKey('User', related_name='followers', on_delete=models.CASCADE, null=True)
follower = models.ForeignKey('User', related_name='targets', on_delete=models.CASCADE, null=True)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return '{} is followed by {}'.format(self.target, self.follower)
class User(AbstractBaseUser):
username = models.CharField(max_length=15, unique=True)
email = models.EmailField(max_length=100, unique=True)
Я использую Django Rest-Framework, поэтому я иду по конкретному URL, чтобы получить необходимую информацию.После перехода по URL, ожидается выход.Я получаю всех подписчиков, которые есть у пользователя.
views.py
class GetFollowersView(ListAPIView):
serializer_class = FollowingSerializer
def get_queryset(self):
requested_user = get_requested_user(self)
return User.objects.filter(targets__target=requested_user).order_by('-targets__created_at'). \
annotate(is_following=Count('followers__follower', filter=Q(followers__follower=requested_user), distinct=True))
def get_requested_user(self):
filter_kwargs = {'username': self.kwargs['username']}
return get_object_or_404(User.objects.all(), **filter_kwargs)
serializers.py
class FollowingSerializer(serializers.ModelSerializer):
is_following = serializers.IntegerField()
class Meta:
model = User
fields = ('id', 'username', 'follower_count', 'following_count', 'is_following')
Однако проблема заключается в is_following
аннотация.Я хотел бы видеть, следует ли пользователь за каждым конкретным подписчиком.Если они следуют за этим подписчиком, тогда is_following
должно быть 1, если нет, то это 0. Я получаю неверные результаты в is_following
Есть ли способ проверить, следует ли пользователь за каждым конкретным подписчиком?