0
我想過濾一個項目的_set,但是在下面的問題中,當我這樣做時,它不在我認爲是的字段上。我需要使用rating__rating來獲取帖子表中的評級表的評級列。django嵌套foreignkey設置查詢
在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,簡單。
可能想要考慮將這些'for'循環移入QuerySet中。數據庫擊中速度緩慢。查看[聚合](https://docs.djangoproject.com/en/dev/topics/db/aggregation/)。 –
story.post_set.filter統計帖子數,而不是收視率。看到我的答案。 – Tisho
我同意@Mike。 –