在 Django Admin 中使用 DateTimeField 保存模型实例会丢失微秒分辨率

Saving model instance with DateTimeField in Django Admin loses microsecond resolution

在 Django 1.8 中,假设我们有这个非常简单的模型:

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

当我将模型实例保存到我的 PostgreSQL 数据库时,timestamp 字段将有微秒。我注意到,如果我尝试从 Django 管理员编辑特定模型实例,timestamp 字段在保存回数据库时将失去微秒分辨率。

大多数应用程序不需要这种精度级别,但对于确实需要这种精度的应用程序,最好能够消除导致这种分辨率损失的所有可能原因。是否有任何已知的 way/feature 来防止这种情况或者这是 bug/limitation?

问题是默认的管理小部件不支持微秒。您可以改用 formfield_overrides to use 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,这样它就根本无法更改。