如何在Django上列出关系manytomany的对象?例如:用户并遵循

时间:2014-02-14 23:04:20

标签: python django django-models django-orm

我正在制作像twitter这样的微博,我想列出经过身份验证的用户所关注的用户帖子。

型号:

class Post(models.Model):
    post = models.TextField(max_length=300)
    created = models.DateTimeField(auto_now=True)
    user = models.ForeignKey(User)

    def __unicode__(self):
        return self.post

class UserProfile(models.Model):
    USER_SEX = (
        ('M', 'Masculino'),
        ('F', 'Femenino'),
    )
    birthday = models.DateField(null=False)
    sex = models.CharField(max_length=1, choices=USER_SEX)
    description = models.TextField(max_length=100, null=True)
    location = models.CharField(blank=True, max_length=100, null=True)
    user = models.OneToOneField(User)
    follows = models.ManyToManyField('UserProfile', related_name='followed_by', blank=True, symmetrical=False)

    def __unicode__(self):
            return self.user.get_username()

查看:

def show_posts(request):
    user = request.user
    following = user.userprofile.follows.all()
    posts = Post.objects.filter(user__in=following).order_by('-created')
    return render_to_response("posts.html", context_instance = RequestContext(request, {'posts':posts}))

此函数返回所有用户的所有帖子,但经过身份验证的用户除外。我不想要这个。 我想显示所有用户的帖子,只有经过身份验证的用户才会关注,以及用户身份验证的帖子。

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

我不确定我的答案,但没有人回答,所以这是我的尝试。

following是一个QuerySet,它会成为UserProfile的列表,但您会对user__in进行过滤,Userfollows的列表。您可以尝试将User一个ManyToManyField改为{{1}}并告诉我们结果吗?即使你仍然遇到同样的问题,过滤器也会更有意义!