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_now和auto_now_add都是不可编辑的字段,你不能覆盖它们…