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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:36:32