gpt4 book ai didi

Django SelectDateWidget 不保存日期

转载 作者:行者123 更新时间:2023-12-04 19:16:35 27 4
gpt4 key购买 nike

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

模型.py

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

表格.py
from django.forms.extras.widgets import SelectDateWidget

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

原始文件后端.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

post数据生成dob_day、dob_month和dob_year。我试图清理数据但无济于事。任何帮助将不胜感激。

已解决:

配置文件后端.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()

最佳答案

cleaned data来自 bound form如果表单没有错误,实例应该包含正确的日期对象。

使用此日期对象将其分配给 p.dob
我不太明白您是如何处理注册表单的,但通常它是这样工作的:用户提交表单后,您创建一个绑定(bind)表单,确保它有效,然后访问清理后的表单数据。像这样的东西:

# 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 .

关于Django SelectDateWidget 不保存日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8742878/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com