DateTimeField不显示在pipe理系统中

我的“date”字段怎么没有出现在pipe理系统中?

在我的admin.py文件中

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

和评级模型有一个叫做“date”的字段,看起来像这样

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

但是,在pipe理系统中,即使editable设置为True ,该字段也不会显示。

有人有什么主意吗?

我相信原因在于auto_now_add字段。

从这个答案 :

设置了auto_now属性的字段也将inheritanceeditable = False,因此不会显示在pipe理面板中。

在文档中还提到:

按照当前的实现,将auto_now或auto_now_add设置为True将导致该字段具有editable = False和blank = True设置。

这是有道理的,因为没有理由让这个字段在被保存的时候被当前date时间覆盖。

如果您确实想在pipe理控制台中看到date,则可以在admin.py中添加readonly_fields

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

您指定的任何字段将在可编辑字段后最后添加。 要控制订单,您可以使用fields选项。

其他信息可以从Django文档中获得 。

主要黑客:

如果你真的需要这样做(就像我这样做),你可以通过立即设置字段为“可编辑”来定义字段,如下所示:

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

这将使该字段可编辑,所以你可以改变它。 这似乎工作正常,至less在MySQL的支持引擎。 我不能说certian如果其他后援存储将使这个数据在数据库中不可变,从而导致尝试编辑时出现问题,请谨慎使用

根据您的特定需求以及行为差异的细微差别,您可以执行以下操作:

 from django.utils.timezone import now class MyModel(models.Model): date = models.DateTimeField(default=now) 

默认字段可以这样使用: https : //docs.djangoproject.com/en/dev/ref/models/fields/#default

 The default value for the field. This can be a value or a callable object. If callable it will be called every time a new object is created. 

这不能设置为False

这可能与auto_now_add为真有关。 也许而不是该参数捕获添加date,你可以重写模型保存方法来插入date时间,当id为空。

 class Rating(models.Model): .... def save(self, *args, **kwargs) if not self.id: self.date = datetime.datetime.now() 

如果您希望在您的所有条目列表中(当您单击pipe理员中的模型时)显示任何字段,而不是当您打开该特定条目时,

 class RatingAdmin(admin.ModelAdmin): list_display = ('name', 'date') admin.site.register(Rating, RatingAdmin) 

'name'是您的主要字段或您想要在pipe理面板中显示的任何其他字段。

这样你可以指定你想看到的所有列。

你不能这样做,检查文档

auto_nowauto_now_add都是不可编辑的字段,你不能覆盖它们…