在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/

10-10 12:45