Группировать, используя метку времени в Django Queryset - PullRequest
0 голосов
/ 29 июня 2018

У меня есть одна модель, в которой хранится каждая запись и сохраняется время ее создания. Время не является datetime объектом и отметкой времени . Поле метки времени модели показано ниже:

logged_at = models.CharField (_ ('log time'), max_length = 128, по умолчанию = time.time)

Если вышеуказанное поле является полем даты и времени, тогда я могу написать запрос, который можно сгруппировать по записям, используя поле даты и времени, например:

MyModel.objects.filter(type_='in').annotate(in_time=RawSQL('(date(logged_at))', [])).values('in_time', 'name').annotate(count=Count('name'))

Но я не могу запросить поле timesatmp таким же образом, это выдает мне ошибку date/time field value out of range

Я также пытался использовать такие функции, как to_timestamp гайка все еще не увенчалась успехом

MyModel.objects.filter(type_='in').annotate(in_time=RawSQL('(date(to_timestamp(logged_at)))', [])).values('in_time', 'name').annotate(count=Count('name'))

Ошибка: функция to_timestamp (изменение символа) не существует

База данных, которую я использую: Postgres

1 Ответ

0 голосов
/ 02 июля 2018

Как отметил @Willem в комментарии, отметка времени не должна храниться в CharField. Поэтому мы можем попытаться изменить тип поля во время выполнения, как указано ниже.

MyModel.objects.filter(type_='in').annotate(in_time=RawSQL('(date(to_timestamp(logged_at::float)))', [])).values('in_time', 'name').annotate(count=Count('name')) 

В приведенном выше запросе я изменил тип logged_at на float, и он отлично работает для меня, вы также можете изменить его на int.

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