Python Django queryset由用户关注的作者撰写的文章
我有两种型号Python Django queryset由用户关注的作者撰写的文章,python,django,django-queryset,Python,Django,Django Queryset,我有两种型号 class Account(AbstractBaseUser, PermissionsMixin): followers = models.ManyToManyField( 'Account', related_name='followers', blank=True, ) following = models.ManyToManyField( 'Account', related_name='followin
class Account(AbstractBaseUser, PermissionsMixin):
followers = models.ManyToManyField(
'Account', related_name='followers',
blank=True,
)
following = models.ManyToManyField(
'Account', related_name='following',
blank=True,
)
及
我正在编写一个应用程序,用户可以在其中相互订阅并创建文章
我怎样才能请求收到我订阅的所有文章?
我试着做一些类似的事情:
(伪代码)
但我知道这是不对的您可以先获取以下列表,然后使用中的
\u根据该列表筛选文章:
user = self.get_object()
following = user.following.values_list('id', flat=True)
articles = Article.objects.filter(author_id__in=following)
您可以先获取以下列表,然后使用
中的\u根据此列表筛选文章:
user = self.get_object()
following = user.following.values_list('id', flat=True)
articles = Article.objects.filter(author_id__in=following)
您不需要两个多对多字段
例如,您可以删除followers
多对多字段,然后使用follower
字段的反向关系获取帐户的followers
class Account(AbstractBaseUser, PermissionsMixin):
following = models.ManyToManyField(
'Account',
related_name='followers',
blank=True,
)
然后可以使用双下划线表示法对多对多字段进行筛选:
articles = Article.objects.filter(author__followers=user)
您不需要两个多对多字段
例如,您可以删除followers
多对多字段,然后使用follower
字段的反向关系获取帐户的followers
class Account(AbstractBaseUser, PermissionsMixin):
following = models.ManyToManyField(
'Account',
related_name='followers',
blank=True,
)
然后可以使用双下划线表示法对多对多字段进行筛选:
articles = Article.objects.filter(author__followers=user)
您可能希望将followers和following字段分成两个类。
(伪代码)
循环到您跟踪的所有作者中,并附加到列表中。当然,您的文章应该有一个文章字段,可以发布文章
AuthorOfArticle = Author.objects.get(author='author to get all following')
FollowingAuthorsObj = Following.objects.filter(author=AuthorOfArticle.author) #get all the authors you are following.
ArticlesOfAuthor=[] #create a list variable
for authors in FollowingAuthorsObj: #loop through all you are following
ArticlesOfAuthor.append(Article.objects.filter(author=authors[0].author))
#save it to a list of all articles.
希望这有帮助。您可能希望将关注者和以下字段分为两类。
(伪代码)
循环到您跟踪的所有作者中,并附加到列表中。当然,您的文章应该有一个文章字段,可以发布文章
AuthorOfArticle = Author.objects.get(author='author to get all following')
FollowingAuthorsObj = Following.objects.filter(author=AuthorOfArticle.author) #get all the authors you are following.
ArticlesOfAuthor=[] #create a list variable
for authors in FollowingAuthorsObj: #loop through all you are following
ArticlesOfAuthor.append(Article.objects.filter(author=authors[0].author))
#save it to a list of all articles.
希望这能有所帮助。如果一个用户在你后面
,那么该用户就是你的追随者之一
,因此通过引入两个关系,你引入了数据复制,这通常是个坏主意。如果一个用户在你后面
,那么该用户就是你的追随者之一,因此通过引入两个关系,您引入了数据复制,这通常是一个坏主意。是的,这似乎是您所需要的,非常感谢!)是的,看来这就是你需要的,非常感谢!)在我的例子中,这将返回一个空查询。对不起,这不适合我,但谢谢你的回答)我想我可能使用了错误的查询。请改为尝试author\uuu followers=user
。区别是什么?author\uu followers=user
返回用户跟随文章作者的文章author\uu following=user
返回作者跟随用户的文章。在我的例子中,这返回一个空查询。对不起,这不适合我,但谢谢你的回答)我想我可能使用了错误的查询。请改为尝试author\uuu followers=user
。区别是什么?author\uu followers=user
返回用户跟随文章作者的文章author\uu following=user
返回作者跟随用户的文章。