我尝试在上一篇文章中遵循以下答案: DateTimeField在管理系统中未显示
但是也许我太昏暗了,无法理解它。
没有显示created_at的字段。有人能指出我正确的方向吗?
模型
class holding_transaction(models.Model):
holdingname = models.ForeignKey(holding, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
Run Code Online (Sandbox Code Playgroud)
管理员
class holding_transactionAdmin(admin.ModelAdmin):
readonly_fields = ('created_at', )
admin.site.register(holding_transaction, holding_transactionAdmin)
Run Code Online (Sandbox Code Playgroud)
编辑:
更新:
这是一个虚构应用程序对我有用的代码Beatles:
甲壳虫/模型.py:
from django.db import models
# Create your models here.
class Person(models.Model):
name = models.CharField(max_length=128)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self): # __unicode__ on Python 2
return self.name
Run Code Online (Sandbox Code Playgroud)
披头士乐队/admin.py
from django.contrib import admin
# Register your models here.
from beatles.models import Person
@admin.register(Person)
class PersonAdmin(admin.ModelAdmin):
readonly_fields = ('created_at', )
Run Code Online (Sandbox Code Playgroud)
提到的问题的答案指出,这是不可能发生的。
但是,如果要编辑此类字段,请根据文档进行以下操作:
如果您希望能够修改此字段,请设置以下内容,而不是auto_now_add = True:
Run Code Online (Sandbox Code Playgroud)For DateField: default=date.today - from datetime.date.today() For DateTimeField: default=timezone.now - from django.utils.timezone.now()
如果您只想显示这些字段,则可以使用以下代码:
Run Code Online (Sandbox Code Playgroud)class YourModelAdmin(admin.ModelAdmin): readonly_fields = ('created_at', 'updated_at', ) admin.site.register(YourModel, YourModelAdmin)