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 для его хранения.

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