Как получить пользователей, за которыми я слежу?
Я хочу сделать viewset, чтобы request.user (аутентифицированный пользователь) мог получать пользователей в представлении, за которым он следит. Но я не знаю, как сделать соответствующий фильтр кверисета для этого.
Модели (Примечание: Автор - тот, кто следует, профиль - тот, за кем следуют)
class User(AbstractUser,PermissionsMixin):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
email = models.CharField(max_length=255,unique=True)
username =models.CharField(max_length=40,unique=True,default='undefinedusername')
class UserFollow(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
author = models.ForeignKey(User,on_delete=models.CASCADE,related_name='following')
profile = models.ForeignKey(User,on_delete=models.CASCADE,related_name='followers')
Вид
class FetchUserViewSet(viewsets.ModelViewSet):
permission_classes = (IsAuthenticated,)
queryset = User.objects.all()
serializer_class = UserSerializer
filter_backends = [FollowedUserFilterBackend]
Filter
class FollowedUserFilterBackend(filters.BaseFilterBackend):
def filter_queryset(self, request, queryset, view):
return queryset.filter(
???
)
Я пытался
following__author = request.user
но он возвращает пользователя, который сделал запрос, а не того, кто за ним следовал. Как я могу это сделать?
Вы можете фильтровать с помощью:
return queryset.filter(
followers__author=request.user
)
Здесь мы ищем User
, для которых существует запись UserFollow
, где profile
(не author
) указывает на этого пользователя, а author
указывает на вошедшего пользователя.