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
返回作者跟随用户的文章。