Сохранение экземпляра модели с DateTimeField в Django Admin теряет разрешение микросекунды

в Django 1.8, скажем, у нас есть эта очень простая модель:

class Log(models.Model):
    remarks = models.TextField()
    timestamp = models.DateTimeField(default=timezone.now)

когда я сохраняю экземпляр модели в моей базе данных PostgreSQL,timestamp поле будет микросекунд. Я заметил, что если я попытаюсь отредактировать конкретный экземпляр модели из администратора Django,timestamp поле потеряет разрешение МКС при сохранении обратно в базу данных.

большинству приложений не понадобится такой уровень точности, но для приложений, которые требуют такого, это будет приятно иметь возможность устранить все возможные причины этой потери разрешения. Есть ли какой-либо известный способ/функция для предотвращения этого или это ошибка/ограничение?

1 ответов


проблема в том, что виджет администратора по умолчанию не поддерживает микросекунды. Вы можете переопределить виджет с помощью formfield_overrides использовать DateTimeInput вместо этого и укажите формат, который включает микросекунды.

from django.contrib import admin
from django.db import models
from django import forms

from .models import Log

class LogAdmin(admin.ModelAdmin):

    formfield_overrides = {
        models.DateTimeField: {'widget': forms.DateTimeInput(format='%Y-%m-%d %H:%M:%S.%f')},
    }

admin.site.register(Log, LogAdmin)

в вашем случае, так как это временная метка, другой вариант-добавить поле readonly_fields, так что его вообще нельзя изменить.