我有两个型号
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())
但我知道这不对
答案 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.
希望这有帮助。