Django ORM лучший способ манипулирования запросами django ORM для поиска связанных данных

Модели:

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. generate the my followee list (list of people I follow)
  2. fetch tweets where tweet is posted by userid and is also present in myfolloweelist

Я хотел бы узнать, есть ли лучший способ справиться с этим.

Я попробовал это, и это сработало только для одного значения user_idx, но не для других:

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

Вы можете фильтровать с помощью:

Tweet.objects.filter(user__followee__follower_user=user_idx)

Это позволит получить Tweet, для которых .user является User объектом, для которого существует UserFollowers объект с .user из Tweet как followee_user, и как follower_user объект user_idx.


Примечание: Обычно лучше использовать settings.AUTH_USER_MODEL [Django-doc] для ссылки на модель пользователя, чем использовать User модель [Django-doc] напрямую. Для получения дополнительной информации вы можете посмотреть ссылка на User модель раздел документации .

Вернуться на верх