Django 1.11.20 получает количество строк за неделю и год ISO

Вы также можете взглянуть на возможности библиотеки Qt.

Он поддерживает регулярные выражения, а класс QString имеет хорошие методы, например. split() возвращает QStringList, список строк, полученных путем разделения исходной строки с предоставленным разделителем. Должно быть достаточно для файла csv ..

Чтобы получить столбец с заданным именем заголовка, я использую следующее: c ++ наследование Qt проблема qstring

0
задан Willette Lynch 20 February 2019 в 06:49
поделиться

3 ответа

Вы можете использовать TruncWeek и TruncYear:

from django.db.models.functions import TruncWeek, TruncYear

count_for_week = myModel.objects.annotate(
    week=TruncWeek('created_at'),
).values(
    'week',
).annotate(
    count=Count('id'),
)

count_for_year = myModel.objects.annotate(
    year=TruncYear('created_at'),
).values(
    'year',
).annotate(
    count=Count('id'),
)

В результате вы получите:

 <QuerySet [{'week': datetime.datetime(2019, 2, 18, 0, 0, tzinfo=<UTC>), 'count': 1}]>

Где значения week или year будут дата начала времени для этого диапазона: неделя года

Более подробно вы можете прочитать в Django docs здесь .

0
ответ дан Sergey Pugach 20 February 2019 в 06:49
поделиться

Я разобрался, я забыл заказать результат

from django.db.models.functions import ExtractWeek, ExtractYear
from django.db.models.aggregates import Count

count = myModel.objects.annotate(year=ExtractYear('created_at')) \
    .annotate(week=ExtractWeek('created_at')) \
    .values('year','week') \
    .annotate(count=Count('id')).order_by('count')

<QuerySet [{'year': 2019, 'week': 7, 'count': 8}]>
0
ответ дан Willette Lynch 20 February 2019 в 06:49
поделиться

Проблема заключалась не в пропущенном order_by, а, скорее всего, в обратном: значение по умолчанию order_by предположительно присутствует в myModel посредством поля ordering, определяющего сортировку по умолчанию, которое добавило другое поле в запрос, который саботировал ваша группировка. Соответствующий документ Django здесь здесь .

Вы можете избавиться от него, добавив .order_by() к запросу, или вы можете указать другой порядок, как вы сделали в своем ответе.

Это загвоздка, которая заставляет людей снова и снова (включая меня), поэтому я предпочитаю не использовать сортировку по умолчанию в моделях.

PS: Когда дела идут не по плану, часто помогает проверить сгенерированный SQL, проверяя последний выполненный запрос:

django.db.connection.queries[-1]

... или запрашивая SQL запрос, который вы только что определили:

str(my_query.query)

И если вам нравится то, что вы видите, но вам не нравится, как SQL форматируется (не), изучите sqlparse . [1114 ]

0
ответ дан Endre Both 20 February 2019 в 06:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: