Использование значения из values() в фильтре набора запросов Django внутри аннотации
Я пишу запрос, который получает предложения следовать за ним в социальном приложении. Все остальные поля, которые я хочу получить в ответе API, правильные, но у меня проблема с полем followed_by
в ответе API.
Чтобы определить, какой пользователь, за которым следует текущий пользователь, следует за предложенным человеком & следовательно, текущий пользователь получает предложение, у нас есть поле followed_by
.
Проблема в том, что этот followed_by
получает неправильное значение & выбирает 1-го человека, за которым следит текущий пользователь, который может следовать или не следовать за предложенным человеком. Значение to_user
, которое я использую в значении параметра запроса, очевидно null
в выражении F
. Ниже приведен мой код:
my_followings = self.request.user.friends.values_list("id", flat=True)
#users that are being followed by my following users (friends of my friends)
follow_suggestions = User.friends.through.objects.exclude(
Q(to_user=self.request.user) | Q(to_user__in=my_followings)).filter(
from_user_id__in=my_followings).values("to_user").annotate(
following_count=Count("to_user_id", filter=Q(from_user_id__in=my_followings)),
id=F("to_user__id"),
username=F("to_user__username"),
profile_image=F("to_user__profile_fixed_url"),
followed_by=Value(User.friends.through.objects.filter(
to_user=F("to_user"), from_user_id__in=my_followings).first().from_user.username,
output_field=CharField())
).order_by("-following_count")
Как передать фактическое значение to_user
в параметр запроса to_user
?