Django - Получить все сообщения, которые были созданы за месяц в определенном часовом поясе
Итак, у меня есть модель Post
, которая похожа на сообщение на стене в Facebook или Reddit. Я хочу иметь возможность получить все сообщения, которые были created
в течение месяца в определенном часовом поясе. Причина в том, что в моем приложении есть пагинатор, который позволяет пользователям просматривать сообщения по месяцам, и я хочу сделать запрос, а не отправлять им все сообщения, так как их может быть тысячи, и это займет много времени. Я также хочу, чтобы это было в их часовом поясе, потому что Django хранит datetime
в UTC, поэтому то, что может быть постом, созданным в конце ноября по UTC, на самом деле должно быть декабрем, если перевести его в локальное время запрашивающего устройства
model.py
class Post(models.Model):
uuid = models.UUIDField(primary_key=True)
created = models.DateTimeField('Created at', auto_now_add=True)
updated_at = models.DateTimeField('Last updated at', auto_now=True, blank=True, null=True)
creator = models.ForeignKey(
User, on_delete=models.CASCADE, related_name="post_creator")
body = models.CharField(max_length=POST_MAX_LEN)
Например, если пользователь создает 10 сообщений в ноябре, 2 в декабре PST. Тогда у меня есть представление, которое принимает month
и time_zone
, тогда оно должно вернуть 10 постов из ноября, если указать '11' для month
и 'PST' для time_zone
. Как вернуть все сообщения за месяц в заданном часовом поясе?
Установка:
- Django 3.2.9
- Postgresql
Postgresql не хранит часовой пояс ни в дате, ни в метках времени, цитирую документацию:
Все даты и время с учетом временной зоны хранятся внутри в UTC. Перед отображением клиенту они преобразуются в местное время в зоне, указанной параметром конфигурации TimeZone.
Значит, у вас недостаточно информации для составления запроса.
Если вам нужен запрос по часовому поясу, вы должны создать новое поле на Post
для его хранения.