簡體   English   中英

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 表記錄了誰關注了誰。

在這里,我需要獲取我關注的人發布的所有推文

目前的做法:

        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. 生成我的關注者列表(我關注的人的列表)
  2. 獲取推文,其中推文由用戶 ID發布並且也存在於 myfolloweelist 中

我想知道是否有更好的方法來處理這個問題。

我試過這個,它只適用於 user_idx 的一個值,但不適用於其他值:

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

您可以使用以下方式過濾:

Tweet.objects.filter(user__followee__follower_user=user_idx)

這將檢索.userUser object 的Tweet ,其中存在UserFollowers object , Tweet.userfollowee_user ,而follower_useruser_idx


注意:通常使用settings.AUTH_USER_MODEL [Django-doc]引用用戶 model 比直接使用User model [Django-doc] 更好 有關更多信息,您可以查看參考文檔的User model部分

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM