2010-12-03 11 views
0

私はテーブルコールドマークを持っています。Django。クエリを混乱させる。アイテム数

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

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

少なくとも1つの票を持つメディアインスタンスのクエリセットを取得できますか(またはメディアを数えればよいですか)。

extraを使ってwhith outにすることはできますか?

更新日: 他の言葉:私はすべてのテーブルを通過し、すべてのユニークなメディアを数えています。私がそれを見つけたら、私はそれを数えていない。 他の言葉:私は一意のメディアフィールドを数える必要があります。

+0

メディアモデルはどのように見えますか? 「投票」というフィールドがありますか?あなたはメディアやマークのインスタンスを意味しますか? –

+0

投票はどこから来たのですか? –

+0

@ダニエル・ローズマン(Daniel Roseman):saing - 1つの投票権を持っています。つまり、このメディアの少なくとも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はそれから何をしたいのかウル質問の確認やどのような投票がある

EDITカウント機能を使用することはできませんが、私は仮定してい

  One row of media 

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