2010-05-30 5 views
1

Donc, voici ce que je veux faire. J'ai un modèle Staff, qui a une clé étrangère au modèle User. J'ai également une correspondance de modèle qui a une clé étrangère au modèle d'utilisateur.Question sur le modèle django API

Je veux sélectionner combien Matches every Staff a. Je ne sais pas comment faire cela, jusqu'à présent, je l'ai seulement travaillé pour le modèle User. De Staff, il ne permettra pas d'annoter Match.

C'est ce qui fonctionne actuellement

User.objects.annotate(amount=Count("match")).filter(Q(amount__gt=0)).order_by("amount") 

Et ce que je voulais faire

Staff.objects.annotate(amount=Count("match")).filter(Q(amount__gt=0)).order_by("amount") 

Et en passant, est-il possible de filtrer les résultats? Je veux filtrer les correspondances par une certaine colonne.

Répondre

1

Cela ne fonctionnera pas?

Staff.objects.annotate(ammount=Count("user__match")).filter(Q(ammount__gt=0)).order_by("ammount") 
+0

Génie !! Merci beaucoup Lakshman, c'était exactement ce dont j'avais besoin! – Clash

1

Si Staff et Match ont des clés étrangères à l'utilisateur, mais pas l'une à l'autre, il n'y a pas de «nombre de correspondances entre chaque membre». Il y a plusieurs Staff et Match pour chaque utilisateur, donc il n'y a simplement aucun moyen de savoir quel Staff pour un utilisateur est lié à quel Match pour ce même utilisateur.

Ceci n'est pas une limitation de Django - c'est une limitation logique, imposée par la façon dont vous avez structuré vos relations.

+0

Merci pour votre réponse Daniel! Ok, mais n'y a-t-il pas de sélectionner tous les utilisateurs qui sont membres du personnel, puis de sélectionner tous les résultats pour ces utilisateurs, puis d'appliquer des filtres et des agrégations? – Clash

+0

@Clash il n'y a aucun moyen sensé, mais peut-être que vous pourriez sélectionner tout le personnel, obtenir l'ID pour chaque utilisateur dans le personnel, puis sélectionnez tous les objets correspondants qui ont une clé étrangère dans la liste de ces ID utilisateur. –