Django Admin中`creation_date`字段已配置`list_display`但仍不显示的问题求助
Django Admin中
creation_date字段已配置list_display但仍不显示的问题求助 我看了你的问题描述,马上发现了一个新手常踩的小坑——这大概率就是creation_date字段不显示的原因!
问题出在这一行代码
你在admin.py里写的list_display有个细节错误:
list_display = ('creation_date') # 这里少了一个关键的逗号!
Django要求list_display必须是元组或列表。当你只传一个元素却不加逗号时,Python会把('creation_date')解析成普通字符串,而不是元组。这时候Django会“认死理”地迭代这个字符串的每个字符,把每个字母当成字段名来找——显然不存在这些“字段”,所以最终列表里啥也不会显示(当然你的creation_date也不会出现)。
修复方法超简单
只需要给list_display的元素后面加个逗号,确保它是元组:
from django.contrib import admin from .models import VendorProduct class VendorProductAdmin(admin.ModelAdmin): list_display = ('creation_date',) # 注意这里的逗号! readonly_fields = ('creation_date',) admin.site.register(VendorProduct, VendorProductAdmin)
修改完保存,重启一下Django服务器,再刷新后台看看,creation_date应该就乖乖显示在列表里了。
额外的小建议
- 你的
VendorProduct模型里,auto_now_add=True已经会自动设置创建时间,完全不需要再加blank=True, null=True——加了反而让字段允许为空,不符合“记录创建时间”的逻辑,建议改成:
如果你担心已有数据的迁移问题,这个调整也可以后续再改,不影响当前的显示问题。creation_date = models.DateTimeField(auto_now_add=True) - 模型里的
__str__方法返回self.title,但你粘贴的模型代码里没看到title字段?如果是粘贴时漏了就没事,否则运行会报错,记得检查一下哦。
按照这个方法改完,应该就能完全满足你的需求:字段显示在后台列表里,而且是只读状态不能手动编辑。
备注:内容来源于stack exchange,提问作者Google User
相关产品推荐
相关产品推荐

