Аннотирование нескольких значений как 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]
  )
)
Вернуться на верх