django嵌套foreignkey set查询

时间:2012-06-14 11:55:53

标签: django

我想过滤一个项目的_set,但是在下面的问题中,当我这样做时,它不在我认为的那个领域。我需要使用rating__rating来获得帖子表中评级表的评级列。

在django,我有这个:

class Story(models.Model):
    user = models.ForeignKey(User)
    ...

class Post(models.Model):
    post = models.TextField(max_length=345)
    story = models.ForeignKey(Story)
    ...

class Rating(models.Model)
    rating = models.IntegerField()
    post = models.ForeignKey(Post)

然后我可以找到具有设定值的给定帖子的所有评分:

def getPostsForStory(id):
    return arrangeCountOfRatings(Post.objects.filter(story=id))

def arrangeCountOfRatings(postList):
    for post in postList:
        post.rateA = post.rating_set.filter(rating=rateA).count()
    return postList

但我如何从给定的故事中做到这一点?也就是说,我想应用上面的获取每个帖子的计数的过程,但是给出了一个Story对象?

def getStoryItemsForUser(request):
    return arrangeCountOfItems(Story.objects.filter(user=request.user.id)

def arrangeCountOfItems(storyList):
    for story in storyList:
        story.rateA = story.post_set.filter(rating=rateA).count()
    return storyList

没有得到我想要的东西(计数都错了 - 如果有评分的帖子,则为零,1

编辑:

啊。问题是:

story.rateA = story.post_set.filter(rating=rateA).count()

没有搜索我想要的内容 - 它正在有效地搜索rating__id而不是rating__rating

所以我只是将其改为阅读rating__rating,简单。

1 个答案:

答案 0 :(得分:0)

怎么样:

    story.rateA = Rating.objects.filter(rating=ratingA, post__story=story).count()

编辑:同样适用于帖子评分(相当于您的代码):

    post.rateA = Rating.objects.filter(rating=ratingA, post=post).count()

计算指定帖子/故事的评分。