Как изменить формат времени даты Django в строке

Получив длинную строку (сериализованный объект Django), как мы можем найти все временные метки и заменить их на правильный формат (dd/mm/YYYY HH:MM)

Приведен пример строки:

"[{"model": "app_name.files", "pk": 294, "fields": {"filename": "user_1/A.pdf", "user": 1, "uploaded": "2022-01-11T16:49:43.897", "updated": "2022-01-11T16:49:43.897"}}, {"model": "app_name.files", "pk": 296, "fields": {"filename": "user_1/Business_Flow.pdf", "user": 1, "uploaded": "2022-01-11T16:55:05.165", "updated": "2022-01-11T16:55:05.165"}}, {"model": "app_name.files", "pk": 297, "fields": {"filename": "user_1/Business_Flow_K1Wvyz6.pdf", "user": 1, "uploaded": "2022-01-11T17:00:26.649", "updated": "2022-01-11T17:00:26.649"}}, {"model": "app_name.files", "pk": 298, "fields": {"filename": "user_1/2021M4_RF.xls", "user": 1, "uploaded": "2022-01-11T17:01:03.644", "updated": "2022-01-11T17:01:03.644"}}]"

Дата примера (из приведенного примера): 2022-01-11T16:49:43.897 Желаемый формат времени даты: 11/01/2022 16:49

Что я пробовал до сих пор:

@login_required
def my_view(request):
    response = dict()
    if request.method == 'GET':
        files = Files.objects.all().filter(user=request.user)
        for fhr in files:
            fhr.updated = fhr.updated.strftime("%d/%m/%Y %H:%M:%S")
        data = serialize("json", files)
        return HttpResponse(data, content_type="application/json")
    return HttpResponse('')

В основном я пытался отредактировать queryset с правильным форматом strftime("%d/%m/%Y %H:%M:%S"), чтобы при сериализации QuerySet в JSON данные data = serialize("json", files) строка (data) содержала дату и время в правильном формате, но это не сработало.

Теперь я думаю, что единственный шанс - это отредактировать непосредственно строку и заменить эти временные метки на временные метки в правильном формате.

Самый простой способ - указать класс кодера в функции serialize. Обратитесь к документации.

import typing

from datetime import datetime
from django.core.serializers.json import DjangoJSONEncoder


class DatetimeJSONEncoder(DjangoJSONEncoder):

    def default(self, o: typing.Any) -> str:
        result = super().default(o)
        if isinstance(o, datetime):
            result = o.strftime("%d/%m/%Y %H:%M:%S")
        return result

data = serialize("json", files, cls=DatetimeJSONEncoder)
Вернуться на верх