Как изменить формат времени даты 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)