Изменение формата даты и времени после вызова AJAX в Django
У меня есть следующая таблица данных:
$('#table').DataTable( {
responsive: true,
autowidth: false,
destroy: true,
deferRender: true,
ajax: {
url: '/ajax_view/',
type: 'GET',
data: {},
dataSrc: ""
},
columns: [
{"data": "fields.filename"},
{"data": "fields.uploaded"},
{"data": "fields.updated"},
{"data": "fields.user"},
{"data": "pk"},
],
columnDefs: [
{ className: 'text-center', targets: [1] },
{
targets: [0],
class: 'text-center',
orderable: true,
render: function (data, type, row) {
var filename = data.replace(/^[^/]*\//,'');
var buttons = '<a class="file-links" href="/media/'+data+'" target="_blank">'+filename+'</a>';
return buttons;
}
},
{
targets: [-1],
class: 'text-center',
orderable: false,
render: function (data, type, row) {
var buttons = '<button type="button" value="'+data+'" class="btn btn-danger fileId"><svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" fill="white" class="bi bi-trash-fill" viewBox="0 0 16 16"><path d="M2.5 1a1 1 0 0 0-1 1v1a1 1 0 0 0 1 1H3v9a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2V4h.5a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H10a1 1 0 0 0-1-1H7a1 1 0 0 0-1 1H2.5zm3 4a.5.5 0 0 1 .5.5v7a.5.5 0 0 1-1 0v-7a.5.5 0 0 1 .5-.5zM8 5a.5.5 0 0 1 .5.5v7a.5.5 0 0 1-1 0v-7A.5.5 0 0 1 8 5zm3 .5v7a.5.5 0 0 1-1 0v-7a.5.5 0 0 1 1 0z"/></svg></button>';
return buttons;
}
},
],
order: [
[0, 'asc']
],
"pagingType": "numbers",
dom: 'rtp'
});
Работает отлично, но формат дата-время не тот, который мне нужен.
Я получаю следующее:
2022-01-05T10:51:06.360
Но я бы хотел что-то вроде:
05/01/2022 10:51
(DD/MM/YYYY HH:MM
)
Это представление Django:
@login_required
def ajax_view(request):
response = dict()
if request.method == 'GET':
files = File.objects.all().filter(user=request.user)
data = serialize("json", files)
return HttpResponse(data, content_type="application/json")
return HttpResponse('')
File
модель:
class File(models.Model):
filename = models.FileField(null=True, blank=True, upload_to=user_directory_path)
user = models.ForeignKey(
User,
null=True,
blank=True,
on_delete=models.SET_NULL,
)
uploaded = models.DateTimeField(auto_now_add=True, blank=True)
updated = models.DateTimeField(auto_now_add=True, blank=True)
def delete(self, *args, **kwargs):
self.filename.delete()
super().delete(*args, **kwargs)
Что я пробовал до сих пор без успеха:
,
{
targets: [1],
orderable: true,
render: function (data, type, row) {
var uploaded_date = data;
//manipulate data
return buttons;
}
},
{
targets: [2],
orderable: true,
render: function (data, type, row) {
var updated_date = data;
//manipulate data
return buttons;
}
},
Часть //manipulate data
- это то, что я не знаю, как это сделать.
Вы можете получить отформатированную дату в самом запросе следующим образом:
from django.db.models import F, Func, Value, CharField
files = File.objects.filter(user=request.user).annotate(
formatted_date=Func(
F('uploaded'),
Value('dd.MM.yyyy hh:mm'),
function='to_char',
output_field=CharField()
)
)
Выше указано для Postgres, для MySql вы заменяете to_char
на FORMAT