#django #django-queryset #django-orm
#джанго #django-набор запросов #django-орм
Вопрос:
Я хочу получить общее количество пользователей, присоединившихся за день и за неделю, то, что я попробовал, выглядит следующим образом
member_in_day = User.objects.exclude(is_staff=True)
.annotate(day=TruncDay('date_joined')).values('date_joined')
.annotate(total_members=Count('date_joined'))
.order_by('-date_joined')
member_in_week = User.objects.exclude(is_staff=True)
.annotate(week=TruncWeek('date_joined')).values('date_joined')
.annotate(total_members=Count('date_joined'))
.order_by('-date_joined')
Модель является пользовательской, результат, который я получаю, одинаков для обоих запросов, вместо дня он также выдает другой набор запросов. Как я могу получить общее количество за сегодняшний день и общее количество за эту неделю в шаблоне
<QuerySet [{'date_joined': datetime.datetime(2020, 12, 28, 16, 47, 40, 509134, tzinfo=<UTC>), 'total_members': 1}, {'date_joined': datetime.datetime(2020, 12, 23, 11, 8, 19, 241355, tzinfo=<UTC>), 'total_members': 1}, {'date_joined': datetime.datetime(2020, 12, 23, 11, 6, 14, 20673, tzinfo=<UTC>), 'total_members': 1}, {'date_joined': datetime.datetime(2020, 12, 22, 9, 25, 45, 14632, tzinfo=<UTC>), 'total_members': 1}, {'date_joined': datetime.datetime(2020, 12, 22, 9, 24, 25, 819750, tzinfo=<UTC>), 'total_members': 1}, {'date_joined': datetime.datetime(2020, 12, 20, 12, 7, 37, 59113, tzinfo=<UTC>), 'total_members': 1}]> members
Ответ №1:
Вы не должны использовать date_joined
, но day
или week
после усечения, так что:
member_in_day = User.objects.exclude(is_staff=True).values(
day=TruncDay('date_joined')
).annotate(
total_members=Count('date_joined')
).order_by('-day')
То же самое с members_in_week
:
member_in_week = User.objects.exclude(is_staff=True).values(
week=TruncWeek('date_joined')
).annotate(
total_members=Count('date_joined')
).order_by('-week')
Комментарии:
1. @Biju: вы этого не делаете: шаблон не должен иметь отношения к бизнес-логике, только к логике рендеринга , вы должны сделать это в представлении и передать его шаблону.
2. <Набор запросов [{‘week’: datetime.datetime(2020, 12, 28, 0, 0, tzinfo=<UTC>), ‘total_members’: 1}, {‘неделя’: дата-время.дата-время(2020, 12, 21, 0, 0, tzinfo=<UTC>), ‘total_members’: 4}, {‘week’: datetime.datetime(2020, 12, 14, 0, 0, tzinfo=<UTC>), ‘total_members’: 1}]> Участники
3. <Набор запросов [{‘day’: datetime.datetime(2020, 12, 28, 0, 0, tzinfo=<UTC>), ‘total_members’: 1}, {‘day’: datetime.datetime(2020, 12, 23, 0, 0, tzinfo=<UTC>), ‘total_members’: 2}, {‘day’: datetime.datetime(2020, 12, 22, 0, 0, tzinfo=<UTC>), ‘total_members’: 2}, {‘day’: datetime.datetime(2020, 12, 20, 0, 0, tzinfo=<UTC>), ‘total_members’: 1}]> участники
4. это текущий результат
5. @Biju: вы можете перебирать набор запросов, например
{% for item in myqs %}{{ item.week }}: {{item.total_members }}{% endfor %}
.