Как исключить нулевые значения в наборе запросов для charts.js

Я пытаюсь получить количество нарушений в market place для зарегистрированного пользователя. Вошедший пользователь является частью группы. Проблема заключается в том, что он все еще считает значения для предметов на рынке, которые не принадлежат группе. Это добавляет 0 в набор запросов, ломая мои графики,

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

Результат 'Ebay','Amazon','Facebook','Wallmart', '0','0','0','0','0','1','1','1','1',

Я должен получить 'Ebay','Amazon','Facebook','Wallmart', '1','1','1','1','1',

Как исключить подсчет рыночной площадки, если она не входит в группу зарегистрированных пользователей? Я новичок. Спасибо

Вы можете отфильтровать Marketplace, поэтому не в .annotate(..) клаузуле [Django-doc]:

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

Счет всегда будет равен единице (или нулю, если ingrigment равен None).

Одна из проблем вашего фрагмента кода заключается в том, что он всегда будет работать только с первой группой этого пользователя, а это может быть любая из групп, в которых состоит пользователь, поэтому он не очень последовательный. Если вы хотите подсчитать все группы, в которых состоит пользователь user, вы можете использовать:

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

Здесь счетчик всегда будет количеством "совпадающих" групп, или 0 если infrigment будет NULL.

Вернуться на верх