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)
- generate the my followee list (list of people I follow)
- 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
модель раздел документации .