3 votes

Comment exclure les valeurs nulles dans un queryset pour charts.js ?

J'essaie d'obtenir le nombre d'infractions sur la place de marché pour l'utilisateur connecté. L'utilisateur connecté fait partie d'un groupe. Le problème que j'ai est qu'il compte toujours les valeurs pour les articles de la place de marché qui n'appartiennent pas au groupe. Il ajoute 0 dans le queryset, ce qui casse mes graphiques,

u = request.user.groups.all()[0].id  
mar_count =  Marketplace.objects.annotate(infringement_count=Count('infringement', filter=Q(groups=u)))

Le résultat Ebay', 'Amazon', 'Facebook', 'Wallmart', '0', '0', '0', '0', '1', '1', '1', '1',

Je devrais recevoir 'Ebay', 'Amazon', 'Facebook', 'Wallmart', '1', '1', '1', '1',

Comment exclure le comptage de la place de marché lorsqu'elle ne fait pas partie du groupe des utilisateurs connectés ? Je suis nouveau. Merci

3voto

CommuSoft Points 6439

Vous pouvez filtrer les Marketplace donc pas dans le .annotate(..) clause [Django-doc] :

u = request.user.groups.all()[0].id
mar_count = Marketplace.objects.filter(groups=u).annotate(
    infringement_count=Count('infringement')
)

Le compte sera toujours de un (ou zéro si ingrigment est None ).

L'un des problèmes de votre extrait de code est qu'il ne fonctionnera toujours qu'avec l'option premièrement de cet utilisateur, qui peut être n'importe lequel des groupes dont l'utilisateur est membre, ce qui n'est pas très cohérent. Si vous voulez compter tous les groupes dont l user est un membre de, vous pouvez utiliser :

mar_count = Marketplace.objects.filter(groups__user=request.user).annotate(
    infringement_count=Count('infringement')
)

Ici, le compte sera toujours le nombre de groupes "correspondants", soit 0 si le infrigment est NULL .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X