2010-12-03 4 views
0

J'ai la table froide Mark. Comment puis-je obtenir un ensemble de requêtes d'instances de médias (ou simplement compter le média) qui a au moins un vote?Django. Requête déroutante Comptez les articles

Puis-je le faire en utilisant extra?

MISE À JOUR: Je autres mots: Je cours à travers toute la table et compte tous les médias uniques. Si je l'ai trouvé la deuxième fois, je ne compte pas. Autres mots: J'ai besoin de compter les champs médias uniques.

+0

À quoi ressemble votre modèle de support? At-il un champ appelé «vote»? Et voulez-vous dire les médias ou marquer des instances? –

+0

D'où vient le vote? –

+0

@Daniel Roseman: En saing - a un vote, je veux dire que dans le tableau il y a au moins une ligne de ce média. – Pol

Répondre

1

Je suppose la Le modèle "Mark" est la façon dont les utilisateurs votent. Pour obtenir tous les modèles de médias avec leurs comptes de marque, vous avez besoin aggregation:

from django.db.models import Count 

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

Vous pouvez alors utiliser filter() qui fait référence à cette annotation:

voted_media = media_with_vote_count.filter(vote_count__gt=0) 

Il y a aussi d'autres agrégats utiles. Par exemple, vous pouvez calculer une note moyenne pour chaque média:

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 peut utiliser la fonction de comptage, mais pas sûr de la question ur ce que tu veux faire de ou ce qui est vote ..

EDIT:

  One row of media 

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