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

Django编辑表单时DateField字段数据丢失问题求助

解决Django编辑表单中DateField不显示已有值的问题

你的问题出在CiltForm的__init__方法里,存在两处关键错误导致birth_date字段无法加载实例中的已有日期:

  1. initial_date = birth_date这行代码引用了未定义的birth_date变量,正确的应该是调用instance.birth_date
  2. ModelForm会自动从传入的instance中填充字段初始值,你手动设置initial的操作完全多余,反而干扰了默认逻辑;同时Meta类中已经配置了birth_date的widget,__init__里重复设置属于冗余操作。

修正后的forms.py代码

class CiltForm(forms.ModelForm):
    class Meta:
        model = Cilt
        exclude = ['user']  # 二选一:要么用exclude排除字段,要么用fields指定字段,避免同时使用
        widgets = {
            'birth_place': forms.TextInput(attrs={'class': 'form-control'}),
            'birth_date': forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}),
        }
 
    # 如果没有其他自定义需求,这个__init__方法可以完全删除
    # def __init__(self, *args, **kwargs):
    #     super(CiltForm, self).__init__(*args, **kwargs)
    #     # 仅保留必要的自定义逻辑,比如字段提示、样式修改等

补充说明

  • 修正后,ModelForm会自动从instance中读取birth_date的值,并将其转换为HTML5日期输入框要求的ISO格式(YYYY-MM-DD),浏览器会正确识别并显示已有日期。
  • 视图和模板代码无需修改,当前的实现逻辑是正确的。

内容的提问来源于stack exchange,提问作者Prusa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 14:40:05