我正在使用带有django-registration的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()
注册用户时出现的错误是:profile_profile.dob可能不是NULL
帖子数据正在生成dob_day,dob_month和dob_year。我试图清理数据但无济于事。非常感谢任何帮助。
解决:
profilebackend.py
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()
答案 0 :(得分:5)
如果表单没有错误,cleaned data实例中的bound form应该包含正确的日期对象。
使用此日期对象将其分配给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
日期对象仍然是None
或者在尝试使用后端保存时为空,我建议您开始调试代码。您可以安装django_extensions并使用./manage.py runserver_plus
运行开发服务器,以获得此异常的良好交互式堆栈跟踪。或者,您也可以调试code with pdb。