MonthArchiveView в Django возвращает «Таблица« mysql.time_zone »не существует» - PullRequest
0 голосов
/ 12 июня 2019

Я хочу просмотреть архив со следующим URL:

example.com/2019/06
example.com/2018/11

Однако при доступе django.db.utils.ProgrammingError: (1146, "Table 'mysql.time_zone' doesn't exist") возвращается.

Если я изменю USE_TZ в settings.py на False, ошибка исчезнет, ​​и я смогу получить к ней доступ в обычном режиме, но я не хочу иметь значение False.

urls.py

path('<int:year>/<int:month>', ArchiveList.as_view(month_format='%m'), name='archive_list'),

views.py

class ArchiveList(MonthArchiveView):
    model = BlogPost
    template_name = 'blog/post_list.html'
    date_field = 'created_date'
    month_format = '%m'
    year_format = '%Y'
    allow_future = True

    def get_month(self):
        month = super(ArchiveList, self).get_month()
        return month

    def get_year(self):
        year = super(ArchiveList, self).get_year()
        return year

models.py

class BlogPost(models.Model, HitCountMixin):
    author = models.ForeignKey('auth.User', blank=False, on_delete=models.CASCADE)
    main_image = FileBrowseField("mainimage", max_length=200, directory="media/uploads/thumbnail/",
                                 extensions=[".jpg", ".png"], blank=False, null=True)
    category = models.ForeignKey('SubCategory', verbose_name='category', default=3, on_delete=models.PROTECT)
    title = models.CharField(max_length=33, blank=False)
    description = models.TextField(max_length=108, default='', blank=False)
    content = FroalaField(default='', blank=False, null=False)
    created_date = models.DateTimeField(default=timezone.now, blank=False)
    published_date = models.DateTimeField(blank=True, null=True)
    is_public = models.BooleanField(default=True)
    hit_count_generic = GenericRelation(
        HitCount, object_id_field='object_pk',
        related_query_name='hit_count_generic_relation')

settings.py

USE_I18N = True

USE_L10N = True

USE_TZ = True

Что мне теперь делать?

1 Ответ

0 голосов
/ 12 июня 2019

Решено!Причина была в том, что часовой пояс mysql не был UTC.

Сначала проверьте time_zone.

mysql> show variables like '%time_zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | JST    |
| time_zone        | SYSTEM |
+------------------+--------+
2 rows in set (0.00 sec)

Если это не UTC, сначала прочитайте информацию о часовом поясе.

$ mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql

и запишите эту информацию в ~/etc/my.cnf

[mysqld_safe]
timezone = UTC

[mysqld]
default_time_zone = UTC

Затем перезапустите mysql и готово!

$ mysql.server restart

Shutting down MySQL
.. SUCCESS!
Starting MySQL
. SUCCESS!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...