2012-06-14 5 views
0

항목의 _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

EDIT 등급 게시물이있는 경우, 하나의 제로 :.

아 문제는 이렇게이다 :

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

내가 원하는 것을 검색하지 않습니다 - 그것은 rating__id에 효율적으로 검색하는 대신

을 rating__rating한다

그래서 나는 단지 rating__rating이라고 읽도록 변경했습니다.

+2

'for'루프 중 일부를 QuerySet으로 옮기고 싶을 수도 있습니다. 데이터베이스가 느리게 작동합니다. [aggregation] (https://docs.djangoproject.com/en/dev/topics/db/aggregation/)을 확인하십시오. –

+0

story.post_set.filter는 등급 개수가 아닌 게시물 개수를 계산합니다. 내 대답을 보라. – Tisho

+1

@Mike에 동의합니다. –

답변

0

무엇에 대해 :

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

편집 : 같은 포스트 등급 유효 (그리고 코드에 해당)입니다 : 지정된 게시물/이야기에 대한

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

계수 등급.