Django QuerySet Фильтр по week_day ничего не возвращает - PullRequest
0 голосов
/ 26 апреля 2018

В настоящее время я пытаюсь отфильтровать результаты QuerySet по дням недели в Django 2.0.
Я не могу на всю жизнь заставить django week_day filter datetime__week_day возвращать любые результаты.

Модель

class Session(models.Model):
    def __str__(self):
        return str.join(', ', (str(self.game.name), str(self.datetime_created), str(self.start)))

    game = models.ForeignKey(
        'Game',
        on_delete=models.PROTECT,
        blank=False,
        null=False,
    )

    datetime_created = models.DateTimeField(auto_now_add=True,)
    start = models.DateTimeField(blank=True, null=True,)
    end_time = models.TimeField(blank=True, null=True,)
    competitive = models.BooleanField(default=False,)

Фильтрация

filtered_sessions = Session.objects.filter(
    start__week_day=2,
).exclude(start__isnull=True)

В настоящее время у меня есть запись в таблице сеансов (бэкэнд MySQL), которая содержит дату и время 2018-04-30 23:51:42.000000, поэтому я ожидаю, что этот QuerySet будет содержать этот «сеанс», как это происходит в понедельник.

Возвращаясь к документации, неделя начинается с воскресенья (1) до субботы (7).
У меня в настройках USE_TZ, TIME_ZONE='UTC'.
Независимо от этих настроек я также пытался заменить start__week_day=2 значениями от 0 до 8 (включительно, на всякий случай)

У меня такой вопрос: почему то, что я пытаюсь, не дает никаких результатов?

Пожалуйста, дайте мне знать, если я пропустил что-то, что помогло бы ответить на мой запрос.
Спасибо!

EDIT: С тех пор я пытался выполнить прямой запрос в базе данных (SELECT * FROM mysite_session WHERE DAYOFWEEK('start') IN (0-8);)
Нет результатов в базе данных.

1 Ответ

0 голосов
/ 26 апреля 2018

После нескольких часов исследований и испытаний выясняется, что моя проблема действительно связана с USE_TZ, но не напрямую.

Проблема заключалась в том, что я неправильно импортировал свои часовые пояса вмоя база данных MySQL.
Во-первых, у меня не было необходимых таблиц (которые я нашел здесь в строках 60-72)
Во-вторых, я не правильно настроил свои часовые пояса.
Я запустил mysql_tz_info_to_sql /usr/share/zoneinfo | mysql -u root
, где я должен был запустить
mysql_tz_info_to_sql /usr/share/zoneinfo/ | mysql -u root mysql

После правильного выполнения этой команды и проверки того, что у меня действительно есть таблицы в моей базе данных, я смогвыполнить фильтр Django успешно.

Спасибо всем, кто помог, так как я бы не открыл проблему без вашего участия!

...