在 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
,这样它就根本无法更改。
在 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
,这样它就根本无法更改。