Почему 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, это была проблема с часовыми поясами. Я исправил это, усекая даты для удаления часовых поясов перед извлечением дней недели.

Вернуться на верх