Django SelectDateWidget not saving date
我使用带有django注册的SelectDateWidget在注册时保存出生日期。我已经尝试排除生日,创建了一个配置文件,并用额外的数据保存。我不太确定哪里出了问题。
模特儿
1 2 3 | class Profile(models.Model): ... dob = models.DateField(_('birthday')) |
表单
1 2 3 4 5 6 7 | from django.forms.extras.widgets import SelectDateWidget class ProfileRegistration(RegistrationFormTermsOfService): ... dob = forms.DateField(widget=SelectDateWidget(years=range(1999,1939,-1)), label=_("Birthday"), ) |
prifilebackend.py版
1 2 3 4 5 6 7 8 9 | 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() |
注册用户时出现的错误是:profile_profile.dob不能为空
post数据生成dob_日、dob_月和dob_年。我试图清理数据,但没有用。如有任何帮助,我们将不胜感激。
解决了的:
简介backend.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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() |
如果表单没有错误,则从绑定表单实例中清除的数据应包括正确的日期对象。
使用此日期对象将其分配给
我不太明白您是如何处理注册表单的,但一般来说,它是这样工作的:在用户提交了表单之后,您创建了一个绑定表单,确保它是有效的,然后访问清理过的表单数据。像这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # 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) |
如果