Django SelectDateWidget未保存日期

Django SelectDateWidget未保存日期,django,django-registration,Django,Django Registration,我正在使用带有django注册的SelectDateWidget在注册时保存出生日期。我尝试排除生日,并创建了一个配置文件,并将其与额外的数据一起保存。我不太确定哪里出了问题 models.py class Profile(models.Model): ... dob = models.DateField(_('birthday')) forms.py from django.forms.extras.widgets import SelectDateWidget class

我正在使用带有django注册的SelectDateWidget在注册时保存出生日期。我尝试排除生日,并创建了一个配置文件,并将其与额外的数据一起保存。我不太确定哪里出了问题

models.py

class Profile(models.Model):
    ...
    dob = models.DateField(_('birthday'))
forms.py

from django.forms.extras.widgets import SelectDateWidget

class ProfileRegistration(RegistrationFormTermsOfService):
    ...
    dob = forms.DateField(widget=SelectDateWidget(years=range(1999,1939,-1)),
                          label=_("Birthday"),
                          )
prifilebackend.py

from registration.forms import RegistrationForm
from registration.models import RegistrationProfile

    ...
    class Backend(default.DefaultBackend):
        ...
        p = Profile.objects.get(user=new_user)
        p.dob=kwargs['dob']
        p.save()
signals.user_registered.send(sender=self.__class__,
                                     user=new_user,
                                     request=request)

        u = User.objects.get(username=new_user.username)
        u.first_name = kwargs['first_name']
        u.last_name = kwargs['last_name']

        gender = kwargs['gender']
        dob = kwargs['dob']

        p = Profile(user = new_user, gender = gender, dob = dob)
        p.save()
        u.save()
注册用户时出现的错误是:profile_profile.dob可能不为NULL

post数据将生成dob_日、dob_月和dob_年。我试图清理数据,但没有结果。如蒙协助,将不胜感激

已解决:

profilebackend.py

from registration.forms import RegistrationForm
from registration.models import RegistrationProfile

    ...
    class Backend(default.DefaultBackend):
        ...
        p = Profile.objects.get(user=new_user)
        p.dob=kwargs['dob']
        p.save()
signals.user_registered.send(sender=self.__class__,
                                     user=new_user,
                                     request=request)

        u = User.objects.get(username=new_user.username)
        u.first_name = kwargs['first_name']
        u.last_name = kwargs['last_name']

        gender = kwargs['gender']
        dob = kwargs['dob']

        p = Profile(user = new_user, gender = gender, dob = dob)
        p.save()
        u.save()
如果表单没有错误,则实例中的数据应该包含正确的日期对象

使用此日期对象将其分配给
p.dob

我不太明白您是如何处理注册表的,但一般来说它是这样工作的:用户提交表单后,您创建一个绑定表单,确保它有效,然后访问清理后的表单数据。大概是这样的:

# forms.py
...
class RegistrationForm(forms.Form):
    ...
    dob = forms.DateField(widget=widgets.SelectDateWidget())

# views.py
...
def myform_view(request):
    ...
    if request.POST:
        form = RegistrationForm(request.POST)
        if form.is_valid():
            dob = form.cleaned_data.get('dob')
            # dob is now a python date object
            do_something_with_birthday(dob)

如果在使用后端保存时,
dob
date对象仍然是
None
或空的,我建议您开始调试代码。您可以使用
/manage.py runserver\u plus
安装并运行开发服务器,以获得此异常的良好交互堆栈跟踪。或者,您也可以调试您的。

我正在使用自定义后端,并且我能够保存名字和姓氏。以下内容:
def clean_dob(self):dob=self.cleaned_data.get('dob')在我的表单中打印dob
。py是在错误发生之前以正确格式打印日期。解决方案仍然如此。请参阅我答案末尾的调试说明。非常感谢您的建议,在后端保存成功。我的解决方案见上文。我试图避免自定义视图。我看不出有什么理由这么做。