Django无法存储日期至数据库,cleaned_data中birday为None求助
解决Django日期字段无法存入数据库的问题
从你提供的调试信息里,我一眼就发现了核心问题:字段名拼写不一致!
看一下你给出的两个数据:
- 前端提交的
QueryDict里,日期字段的键是birthday(带有字母t) - 但
cleaned_data里的键是birday(少了一个t)
这就是为什么cleaned_data['birday']是None——你在表单或者视图里写错了字段名,导致无法匹配到前端提交的birthday数据。
下面是具体的排查和修复步骤:
1. 检查表单类的字段定义
不管你用的是Form还是ModelForm,先确认日期字段的名称是birthday,而不是拼写错误的birday:
# 示例:ModelForm的正确写法 from django import forms from .models import User class UserForm(forms.ModelForm): class Meta: model = User fields = ['nick_name', 'birthday', 'gender', 'address', 'mobile', 'email'] # 如果是自定义字段,也要确保名称正确 widgets = { 'birthday': forms.DateInput(attrs={'type': 'date'}) }
如果是普通Form,同样要保证字段名是birthday:
class UserForm(forms.Form): nick_name = forms.CharField(max_length=50) birthday = forms.DateField() # 这里是birthday,不是birday # 其他字段...
2. 检查视图中的字段引用
在处理表单的视图里,确保你从cleaned_data中获取的是正确的birthday字段:
def user_create(request): if request.method == 'POST': form = UserForm(request.POST) if form.is_valid(): # 正确获取字段 user_data = { 'nick_name': form.cleaned_data['nick_name'], 'birthday': form.cleaned_data['birthday'], # 这里别写成birday! 'gender': form.cleaned_data['gender'], # 其他字段... } # 存入数据库的逻辑 User.objects.create(**user_data) return redirect('user_list') # GET请求逻辑...
3. 确认前端表单的name属性
最后再检查一下前端HTML里的日期输入框,确保name属性是birthday,和后端完全一致:
<form method="post"> {% csrf_token %} <input type="date" name="birthday" id="id_birthday"> <!-- 其他表单元素 --> <button type="submit">提交</button> </form>
只要把所有地方的字段名统一为birthday(或者统一改成你想要的birday,但要保证前后端完全一致),问题就能解决了。
内容的提问来源于stack exchange,提问作者Liu Harry
相关产品推荐
相关产品推荐

