2010-04-07 6 views
0

Débutant question. Je modèles Django qui ressemblent à ceci:Question newbie Django: obtenir le nombre de ForeignKey associé, conditionnel au champ dans la table ForeignKey?

class Video(models.Model): 
    uploaded_by = models.ForeignKey('VideoUser') 
    problem_video = models.BooleanField(default=False) 
class VideoUser(models.Model): 
    name = models.CharField(max_length=250) 
    def num_videos(self): 
     num_videos = Video.objects.filter(uploaded_by=self, problem_video=false).count() 
     return num_videos 

Et je veux être en mesure de produire un leaderboard d'utilisateurs qui ont mises en ligne au moins une vidéo non-problème, commandé par le nombre de vidéos sans problème, ils 'ai téléchargé.

Je peux obtenir une partie du chemin avec annotate - Je peux produire une liste ordonnée, mais je ne sais pas comment la rendre conditionnelle au champ problem_video étant False.

leaderboard = VideoUser.objects. \ 
      .annotate(num_submissions=Count('videosubmission')) \ 
      .filter(num_submissions__gt=0).order_by('-num_submissions') 

Quelqu'un peut-il suggérer comment l'étendre à prendre le champ problem_video compte aussi? Peut-être que j'ai besoin d'une table de pontage ...?

Répondre

2

Si je me souviens bien,

leaderboard = VideoUser.objects. \ 
     .annotate(num_submissions=Count('videosubmission')) \ 
     .filter(num_submissions__gt=0, video__problem_video=False).order_by('-num_submissions') 
+0

Semble travailler ... Merci! – AP257

Questions connexes