Как получить пользователей, за которыми я слежу?

Я хочу сделать 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 указывает на вошедшего пользователя.

Вернуться на верх