[英]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)
我想知道是否有更好的方法來處理這個問題。
我試過這個,它只適用於 user_idx 的一個值,但不適用於其他值:
my_timeline_tweets = Tweets.objects.filter(user__follower = user_idx)
您可以使用以下方式過濾:
Tweet.objects.filter(user__followee__follower_user=user_idx)
這將檢索.user
為User
object 的Tweet
,其中存在UserFollowers
object , Tweet
的.user
為followee_user
,而follower_user
為user_idx
。
注意:通常使用
settings.AUTH_USER_MODEL
[Django-doc]引用用戶 model 比直接使用User
model [Django-doc] 更好。 有關更多信息,您可以查看參考文檔的User
model部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.