【问题标题】:Django ORM better way to manipulate django ORM query to find related dataDjango ORM 操作 django ORM 查询以查找相关数据的更好方法
【发布时间】:2021-11-22 21:51:59
【问题描述】:

型号:

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. 获取推文,其中推文由 userid 发布并且也存在于 myfolloweelist 中

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

我试过了,它只适用于 user_idx 的一个值,但不适用于其他值:

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

【问题讨论】:

    标签: python django django-models django-rest-framework django-views


    【解决方案1】:

    您可以使用以下方式过滤:

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

    这将检索Tweets,其中.userUser对象,UserFollowers对象存在,Tweet.user作为followee_user和@987654333 @user_idx


    注意:通常使用settings.AUTH_USER_MODEL [Django-doc] 引用用户模型比直接使用User model [Django-doc] 更好。更多信息可以查看referencing the User model section of the documentation

    【讨论】:

    • 非常感谢您的帮助。是否有任何资源可以阅读有关如何编写有关 ORM 过滤的关系。
    • @akashdeep:也许您可以关注文档的making queries 部分。这很好地解释了如何进行更高级的查询。在 shell 中编写这些查询也可能会有所帮助,因此可以用所讨论的技术实验
    猜你喜欢
    • 2021-12-19
    • 2021-01-24
    • 2020-12-03
    • 2021-02-17
    • 2017-08-24
    • 1970-01-01
    • 2014-06-13
    • 2021-07-25
    相关资源
    最近更新 更多