Как исключить нулевые значения в наборе запросов для 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
.