在Django 1.8中,可以说我们有一个非常简单的模型:
class Log(models.Model):
remarks = models.TextField()
timestamp = models.DateTimeField(default=timezone.now)
当我将模型实例保存到PostgreSQL数据库中时,
timestamp
字段将以微秒为单位。我注意到,如果尝试从Django管理员编辑特定的模型实例,则将timestamp
字段保存回数据库后将失去微秒的分辨率。大多数应用程序不需要那种精度,但是对于需要这种精度的应用程序,最好能够消除造成分辨率降低的所有可能原因。有什么已知的方法/功能可以防止这种情况发生,或者这是错误/限制吗?
最佳答案
问题是默认管理窗口小部件不支持微秒。您可以使用 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)
在您的情况下,由于它是时间戳记,所以另一个选择是将add字段添加到
readonly_fields
,以便根本不能更改它。关于python - 在Django Admin中使用DateTimeField保存模型实例失去了微秒的分辨率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32113211/