Как в джанго получить время 'Europe/Moscow' при формировании url
class Post(models.Model):
class Status(models.TextChoices):
DRAFT = 'DF', 'Draft'
PUBLISHED = 'PB', 'Published'
tags = TaggableManager()
title = models.CharField(max_length=250)
slug = models.SlugField(max_length=250, unique_for_date='publish')
author = models.ForeignKey(User,
on_delete=models.CASCADE,
related_name='blog_posts')
body = models.TextField()
publish = models.DateTimeField(default=timezone.now)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
status = models.CharField(max_length=2,
choices=Status.choices,
default=Status.DRAFT)
objects = models.Manager() # менеджер, применяемый по умолчанию
published = PublishedManager() # конкретно-прикладной менеджер
class Meta:
ordering = ['-publish']
indexes = [
models.Index(fields=['-publish']),
]
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('blog:post_detail',
args=[self.publish.year,
self.publish.month,
self.publish.day,
self.slug])
Есть такая модель. get_absolute_url - использует дату для создания url По часовым поясам в настройках (settings.py) выставил:
TIME_ZONE = 'Europe/Moscow'
USE_I18N = True
USE_TZ = True
Создаю пост в 0 часов 5 минут 27 августа. База данных PostgreSQL. Пост в таблице создается с датами: publish - "2023-08-27 00:04:12+03", created - "2023-08-27 00:04:14.98488+03", updated - "2023-08-27 00:04:14.98488+03". при этом get_absolute_url создает url вида /2023/8/26/hokkej-s-shajboj/, т.е. с 26 числом. В итоге получаю несуществующую страницу. Если в строке браузера изменить число на 27 - то пост отображается. Получается get_absolute_url получает из БД 26 число (UTC), а view - 27 ('Europe/Moscow'). Почему так происходит?
Источник: Stack Overflow на русском