2013-01-05 4 views
1

J'ai le problème suivant:comment combiner plusieurs agrégats django queryset et filtres

class species(models.Model): 
    pass 

class question(models.Model): 
    species = models.ForeignKey(species) 

class answer(models.Model): 
    question = models.ForeignKey(question) 

Maintenant, j'aimerais récupérer une queryset des espèces qui contiennent toute question qui n'ont pas des réponses .

Je veux dire que je peux obtenir toutes les espèces qui ont des questions à l'aide:

sp = species.objects.annotate(num_questions=Count('question')).filter(
    num_questions__gt=0) 

Je peux aussi obtenir toutes les questions qui ne sont pas de réponses à l'aide:

qs = question.objects.annotate(num_answers=Count('answer')).filter(
    num_answers=0) 

Mais comment puis-je combiner la deux choses ensemble?

merci d'avance!

Répondre

1

Vous pouvez annotations connexion en chaîne comme ceci:

sp = species.objects.annotate(num_questions=Count('question')).annotate(
      num_answers=Count('answer')).filter(num_questions__gt=0, num_answers=0) 
+0

merci pour la réponse, mais je pense que vous avez mal compris ma question. Ma question n'est pas de concaténer les listes de résultats ensemble mais de récupérer des entrées dont la signification est la concaténation des deux conditions. – guinny

+0

@chaiy J'ai modifié ma réponse –