Django DateTimeField default参数不生效问题求助
Django DateTimeField 默认值不生效的解决方案
1. 改用Django时区兼容的时间方法
你当前使用Python标准库的datetime.now作为默认值,和Django的时区系统可能存在冲突。替换为Django自带的时区工具:
修改Models代码:
from django.db import models from django.utils.timezone import now # 导入Django的时区时间方法 class Tutorial(models.Model): tutorial_title = models.CharField(max_length=200) tutorial_content = models.TextField() tutorial_published = models.DateTimeField('date published', default=now) # 替换默认值方法 def __str__(self): return self.tutorial_title
2. 更新数据库迁移
如果之前已经执行过迁移操作,数据库字段的默认值可能未同步更新。重新生成并应用迁移:
python manage.py makemigrations python manage.py migrate
3. 调整Admin字段权限
你的Admin配置中tutorial_published是可编辑状态,若之前误手动输入过固定时间16:39:02,会导致每次编辑都保留这个值。可以设置字段为只读,确保默认值自动生效:
修改Admin代码:
from django.contrib import admin from .models import Tutorial class TutorialAdmin(admin.ModelAdmin): fieldsets = [ ("Title/date",{"fields":["tutorial_title","tutorial_published"]}), ("Content", {"fields":['tutorial_content']}) ] readonly_fields = ['tutorial_published'] # 添加此行,设置字段只读 admin.site.register(Tutorial, TutorialAdmin)
4. 验证新数据
旧数据的时间不会自动更新,你可以在Admin后台新建一条测试数据,查看tutorial_published字段是否显示当前正确时间。
内容的提问来源于stack exchange,提问作者SchrodingersStat
相关产品推荐
相关产品推荐

