用户正在关注的作者的Django查询集

时间:2018-05-23 09:58:23

标签: python django django-queryset

我有两个型号

class Account(AbstractBaseUser, PermissionsMixin):
    followers = models.ManyToManyField(
        'Account', related_name='followers',
        blank=True,
    )
    following = models.ManyToManyField(
        'Account', related_name='following',
        blank=True,
    )

class Article(models.Model):
    author = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        null=True,
        blank=True,
    )

我正在编写一个用户互相订阅并创建文章的应用程序。

如何发出请求以接收我订阅的人的所有文章? 我尝试做类似的事情: (伪代码)

user = self.get_object()
articles = Article.objects.filter(author=user.followers.all())

但我知道这不对

3 个答案:

答案 0 :(得分:3)

您可以先获取以下列表,然后使用__in根据此列表过滤文章:

user = self.get_object()
following = user.following.values_list('id', flat=True)
articles = Article.objects.filter(author_id__in=following)

答案 1 :(得分:3)

您不需要两个多对多字段。

例如,您可以删除followers多对多字段,然后使用following字段的反向关系获取帐户的关注者。

class Account(AbstractBaseUser, PermissionsMixin):
    following = models.ManyToManyField(
        'Account', 
        related_name='followers',
        blank=True,
    )

然后,您可以使用双下划线表示法来过滤多对多字段:

articles = Article.objects.filter(author__followers=user)

答案 2 :(得分:0)

您可能希望将关注者和关注字段分成两个类。 (伪代码)

class Following():
    author_id = models.foreignkey('Author')
    following_authors = models.integerfield('Following_Authors')

循环到您关注的所有作者并附加到列表中。当然,您的文章应该有一个文章字段,可以发布他们的文章。

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.

希望这有帮助。