Django ORM 更好的方法来操作 django ORM 查询来查找相关数据

Django ORM better way to manipulate django ORM query to find related data

型号:

class Tweets(models.Model):

    date_created = models.DateTimeField(default=now, verbose_name="Created on")
    tweet_data = models.TextField(verbose_name='tweet message')
    user = models.ForeignKey(User,on_delete=DO_NOTHING)

class UserFollowers(models.Model):

    follower_user = models.ForeignKey(User,on_delete=CASCADE,related_name="follower")
    followee_user = models.ForeignKey(User,on_delete=CASCADE,related_name="followee")

UserFollowers table 有谁关注谁的记录。

在这里, 我需要获取我关注的人发布的所有推文

当前方法:

        myfollowees = UserFollowers.objects.filter(follower_user=user_idx)
        print(myfollowees)
        myfolloweeslist = []
        for ele in myfollowees:
            myfolloweeslist.append(ele.followee_user.id)
        my_timeline_tweets = Tweets.objects.filter(user_id__in = myfolloweeslist)
  1. generate the my followee list(我关注的人列表)
  2. 获取推文,其中推文由 userid 发布并且也存在于 myfolloweelist

我想知道是否有更好的方法来处理这个问题。

我试过了,它只对 user_idx 的一个值有效,但对其他值无效:

        my_timeline_tweets = Tweets.objects.filter(user__follower = user_idx)

您可以过滤:

Tweet.objects.filter(<strong>user__followee__follower_user=user_idx</strong>)

这将检索 Tweets,其中 .user 是一个 User 对象,其中 UserFollowers 对象存在 .user Tweet 作为 followee_user,作为 follower_user user_idx


Note: It is normally better to make use of the settings.AUTH_USER_MODEL [Django-doc] to refer to the user model, than to use the User model [Django-doc] directly. For more information you can see the referencing the User model section of the documentation.