Аннотирование нескольких значений как JSONObject - разбор datetime
Я аннотирую свой QuerySet следующим образом, используя JSONObject
, чтобы получить несколько полей из Scan
:
MyModel.objects.annotate(
myscan=Subquery(
Scan.objects
.all()
.values(data=JSONObject(
id='id',
nin='nin',
datetime='datetime')
)[:1]
)
)
Я хочу получить правильное представление времени даты, так или иначе.
Когда я пытаюсь использовать myscan.datetime
, я получаю строковое представление (например, datetime': '2024-12-31T09:19:30.221953+00:00
).
Как я могу либо вернуть сам объект datetime (вместо строки; предполагается, что это невозможно при использовании JSONObject
), либо сделать strptime()
перед возвратом строки как части JSON?
Очевидно, я мог бы разобрать строку, преобразовать ее в дату, а затем снова сделать strptime()
, но это кажется грязным решением. Какие-нибудь предложения?
При использовании PostgreSQL формат времени даты может быть разобран/кастрирован следующим образом (с использованием формата Postgres):
from django.db.models.functions import Cast
from django.db.models import Subquery, F, Value, Func, CharField
MyModel.objects.annotate(
myscan=Subquery(
Scan.objects
.all()
.values(data=JSONObject(
id='id',
nin='nin',
datetime=Cast(
Func(
F('datetime'),
Value('DD-MM-YYYY HH24:MI'),
function='TO_CHAR'
),
output_field=CharField()
)
)
)[:1]
)
)