DateTimeField在管理系统中未显示

119 投票
10 回答
43660 浏览
提问于 2025-04-16 19:46

为什么我的“日期”字段在管理系统中不显示呢?

在我的admin.py文件里,我写了

from django.contrib import admin
from glasses.players.models import *
admin.site.register(Rating)

而且评分模型里有一个叫“日期”的字段,长得像这样

date = models.DateTimeField(editable=True, auto_now_add=True)

可是,在管理系统里,这个字段就是不显示,尽管editable设置为True

有没有人知道这是为什么呢?

10 个回答

25

重要提示:

如果你真的需要这样做(就像我一样),你可以通过立即将字段设置为“可编辑”来绕过这个问题,定义字段的方法如下:

class Point(models.Model):
  mystamp=models.DateTimeField("When Created",auto_now_add=True)
  mystamp.editable=True

这样做会让这个字段变得可编辑,你就可以实际修改它。至少在使用mysql数据库时,这个方法似乎运行得很好。不过我不能确定其他类型的数据库是否会让这些数据在数据库中变得不可更改,从而在尝试编辑时出现问题,所以请谨慎使用

262

如果你真的想在管理面板中看到日期,可以在admin.py文件中添加readonly_fields

class RatingAdmin(admin.ModelAdmin):
    readonly_fields = ('date',)

admin.site.register(Rating,RatingAdmin)

你指定的任何字段都会在可编辑字段之后最后添加。如果想控制字段的顺序,可以使用fields选项。

更多信息可以查看Django文档

74

我觉得问题出在 auto_now_add 这个字段上。

根据 这个回答

任何设置了 auto_now 属性的字段,都会自动变成不可编辑,也就是说在管理面板中不会显示出来。

文档 中也提到过:

目前的实现是,如果将 auto_now 或 auto_now_add 设置为 True,这个字段会自动变成不可编辑,并且允许为空。

这样说是有道理的,因为如果这个字段在保存对象时会被当前的日期时间覆盖,那就没有必要让它可编辑了。

撰写回答