Django编辑表单时DateField字段数据丢失问题求助
解决Django编辑表单中DateField不显示已有值的问题
你的问题出在CiltForm的__init__方法里,存在两处关键错误导致birth_date字段无法加载实例中的已有日期:
initial_date = birth_date这行代码引用了未定义的birth_date变量,正确的应该是调用instance.birth_date- 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
相关产品推荐
相关产品推荐

