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

Wan*_*der 8 python django django-models django-orm django-admin

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

class Log(models.Model):
    remarks = models.TextField()
    timestamp = models.DateTimeField(default=timezone.now)
Run Code Online (Sandbox Code Playgroud)

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

大多数应用程序不需要那么高的准确度,但对于需要这样的应用程序,能够消除这种分辨率损失的所有可能原因将是很好的.是否有任何已知的方法/功能来防止这种情况或这是一个错误/限制?

Ala*_*air 6

问题是默认的管理窗口小部件不支持微秒.您可以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)
Run Code Online (Sandbox Code Playgroud)

在您的情况下,因为它是一个时间戳,另一个选项是添加添加字段readonly_fields,以便它根本无法更改.