Да, хотя ваша фильтрация немного отключена, вы можете просто установить .filter(user=user)
:
class LeadManager(models.Manager):
def get_leads_per_city(self, user):
queryset = self.filter(
<b>user=user</b>
).values('city').annotate(Count('id')).order_by('city')
return list(queryset.values('city', 'id__count'))
Имя параметра <b>user=</b>user
действительно не относится к user
параметр функции.ORM Django будет искать поле с этим именем, и мы передаем ему user
вызова параметра.
По вашему мнению, вы можете вызвать это с помощью:
def leads_by_city(request):
# Invoke Lead classmethod to get the data
data = Lead.objects.get_leads_per_city(<b>request.user</b>)
return JsonResponse(data, safe=False)
* 1014Как говорится, вы используете механизм Django
QuerySet
для создания словарей.Это обычно
, а не рекомендуется.Возможно, вы захотите использовать
Serializer
, как это предлагается в Django REST Framework [drf-doc] .
. Кроме того, не рекомендуется передавать список в видеJSON ответ. JSON эксплуатирует с этим, вам лучше обернуть это в словарь.
Поскольку вам требуется вошедший в систему пользователь, также может быть лучше добавить @login_required
decorator [Django-doc] здесь, который будет возвращать ответ HTTP перенаправления, если пользователь не вошел в систему:
from django.contrib.auth.decorators import <b>login_required</b>
<b>@login_required</b>
def leads_by_city(request):
# Invoke Lead classmethod to get the data
data = Lead.objects.get_leads_per_city(request.user)
return JsonResponse(<b>{'data'</b>: data<b>}</b>)