Почему Django ExtractWeekDay присваивает один и тот же день последовательным датам?
У меня есть модель CustomerPurchase, которая записывает метаданные о совершенной покупке. Я пытаюсь отфильтровать жалобы, к которым привязаны эти покупки, с помощью внешнего ключа и связанных именных билетов, затем сгруппировать их по дням недели, чтобы найти, в какие дни недели больше всего жалоб.
Я столкнулся с проблемой, когда при использовании ExtractWeekDay в Django у меня есть последовательные дни, указанные как два разных дня недели. Почему это происходит?
пример моего кода:
from django.db.models.base import model
from django.db.models.functions import ExtractWeekDay, Trunc
interval_type = 'days'
class CustomerPurchase(model):
business = ForeignKey('data.Business', on_delete=CASCADE)
VISIT_TIME_CHOICES = (
('L', 'Lunch'),
('M', 'Mid-day'),
('D', 'Dinner'),
('N', 'Late Night'),
('U', 'Unrecorded')
)
visit_time = CharField(max_length=1, choices=VISIT_TIME_CHOICES, default='U')
CustomerPurchase.objects.filter(business__company=1080,
tickets__conversation__ci_priority__isnull=False
).exclude(visit_time='U').annotate(
day=ExtractWeekDay('tickets__created_at')
).values('day').annotate(
date_value=Trunc('tickets__created_at', kind=interval_type, output_field=DateField())
)
вывод приведенного выше запроса:
<QuerySet [{'day': 1, 'date_value': datetime.date(2021, 5, 30), 'count': 99}, {'day': 1, 'date_value': datetime.date(2021, 5, 31), 'count': 102}, {'day': 1, 'date_value': datetime.date(2021, 6, 6), 'count': 92}, {'day': 1, 'date_value': datetime.date(2021, 6, 7), 'count': 126}, {'day': 1, 'date_value': datetime.date(2021, 6, 13), 'count': 104}, {'day': 1, 'date_value': datetime.date(2021, 6, 14), 'count': 130}, {'day': 1, 'date_value': datetime.date(2021, 6, 20), 'count': 64}, {'day': 1, 'date_value': datetime.date(2021, 6, 21), 'count': 51}, {'day': 1, 'date_value': datetime.date(2021, 6, 27), 'count': 51}, {'day': 1, 'date_value': datetime.date(2021, 6, 28), 'count': 95}, {'day': 1, 'date_value': datetime.date(2021, 7, 4), 'count': 34}, {'day': 1, 'date_value': datetime.date(2021, 7, 5), 'count': 37}, {'day': 1, 'date_value': datetime.date(2021, 7, 11), 'count': 82}, {'day': 1, 'date_value': datetime.date(2021, 7, 12), 'count': 86}, {'day': 1, 'date_value': datetime.date(2021, 7, 18), 'count': 81}, {'day': 1, 'date_value': datetime.date(2021, 7, 19), 'count': 92}, {'day': 1, 'date_value': datetime.date(2021, 7, 25), 'count': 101}, {'day': 1, 'date_value': datetime.date(2021, 7, 26), 'count': 90}, {'day': 1, 'date_value': datetime.date(2021, 8, 1), 'count': 110}, {'day': 1, 'date_value': datetime.date(2021, 8, 2), 'count': 82}, '...(remaining elements truncated)...']>
Как вы можете видеть, первые две перечисленные даты отображаются как день 1, но последовательные даты не должны иметь один и тот же день недели. Что я делаю неправильно?
Как предположил willem-van-onsem, это была проблема с часовыми поясами. Я исправил это, усекая даты для удаления часовых поясов перед извлечением дней недели.