2010-12-03 2 views
0

나는 차가운 표가 있습니다.장고. 혼란스러운 질문. 상품 수

class Mark(models.Model): 
    media = models.ForeignKey('media.Media') 
    mark = models.PositiveIntegerField() 
    user = models.ForeignKey(User) 

    class Meta: 
     unique_together = ('media_object','user') 

이 어떻게 미디어 인스턴스의 쿼리 세트를 얻을 수있는 적어도 하나의 투표권을 가지고 (또는 미디어를 계산)?

extra을 사용하여 whith를 만들 수 있습니까?

업데이트 : 다른 말로하면 : 나는 모든 테이블을 돌며 모든 고유 미디어를 계산하고 있습니다. 내가 두 번째로 찾으면 나는 그것을 세지 않고있다. 다른 단어 : 고유 한 미디어 필드를 계산해야합니다.

+0

미디어 모델은 어떻게 보이나요? '투표'라는 필드가 있습니까? 그리고 미디어 또는 마크 인스턴스를 의미합니까? –

+0

투표의 출처는 어디입니까? –

+0

@Daniel Roseman : saing - 1 표의 투표권을 가짐.이 표는 적어도이 미디어의 행이 하나 있다는 것을 의미합니다. – Pol

답변

1

나는 있으리라 믿고있어 "표식"모델은 사용자가 투표하는 방식입니다. 자신의 마크 카운트 모든 미디어 모델을 얻으려면, 당신은 aggregation 필요합니다

from django.db.models import Count 

media_with_vote_count = Media.objects.annotate(vote_count=Count('mark_set')) 

당신은 그 주석을 의미하는 filter()를 사용할 수 있습니다

voted_media = media_with_vote_count.filter(vote_count__gt=0) 

하는 다른 유용한 집계가 있습니다. 예를 들어 모든 미디어의 평균 점수를 계산할 수 있습니다.

from django.db.models import Avg 

media_with_markavg = Media.objects.annotate(average_mark=Avg('mark_set__mark')) 
0
mk = Mark.objects.all() 
    mk.media.count() 

U u는 그것에서하고 싶은 또는 투표가 무엇 무엇 UR 질문하지만 확실하지 카운트 기능을 .. 사용할 수 있습니다

편집 :

  One row of media 

      if(mk.media.count() > 0): 
        ......