You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 06:25:21