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
из Tweet
s, состоящий из Tweet
s из User
s, за которыми следует текущий пользователь.
Мне удалось получить следующее, но я не уверен, есть ли лучший способ написать запрос
# 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')