Django: Получение твитов, за которыми следит текущий пользователь

В настоящее время у меня установлены следующие модели

User Модель

class User(AbstractUser):
    pass

Follower Модель

class Follower(models.Model):
    # user is following userFollowing
    user = models.IntegerField()
    userFollowing = models.IntegerField()

Tweet Модель

class Tweet(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="tweets")
    content = models.TextField()
    date = models.DateTimeField(auto_now_add=True)
    likes = models.IntegerField(default=0)

Я хочу получить QuerySet из Tweets, состоящий из Tweets из Users, за которыми следует текущий пользователь.

Мне удалось получить следующее, но я не уверен, есть ли лучший способ написать запрос

# Retrieve all users followed by current user
usersFollowedByCurrentUser = Follower.objects.all().filter(user=request.user.id)

# Retrieve all Tweets
tweets = Tweet.objects.all().filter(user_id__in=Subquery(usersFollowedByCurrentUser.values('userFollowing')))

В общем, я пытаюсь выполнить следующий SQL запрос:

SELECT * FROM Tweet WHERE user IN (SELECT 1 FROM Follower WHERE userFollowing = request.user.id)

Благодарю за любые отзывы/советы

Ваш подход хорош.

Вы можете попробовать этот также непроверенный код.

tweets = Tweet.objects.filter(user__in=usersFollowedByCurrentUser).select_related('user')
Вернуться на верх