2012-01-05 1 views
5

등록시 생년월일을 저장하려면 장고 등록과 함께 SelectDateWidget을 사용하고 있습니다. 나는 생일을 제외하고 시도했다. 그리고 프로필은 여분의 데이터와 함께 만들어지고, 저장된다. 나는 모든 것이 잘못되어가는 것이 확실하지 않다.Django SelectDateWidget가 날짜를 저장하지 않습니다.

models.py

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

forms.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() 

prifilebackend.py

from django.forms.extras.widgets import SelectDateWidget 

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

: 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() 

답변

5

형태에 오류가없는 경우, 정확한 날짜 객체를 포함해야 bound form 인스턴스에서 cleaned data. 형태는 사용자가 제출 한 후, 당신은을 만들 :

사용이 날짜 객체 내가 당신을 아주 등록 양식을 처리하는 방법을하지 않지만, 일반적으로는 다음과 같이 작동 p.dob

에 할당 바운드 폼이 유효한지 확인한 다음 정리 된 폼 데이터에 액세스하십시오. 이런 식으로 뭔가 : 당신의 백엔드를 사용하여 저장하려고 할 때 dob 날짜 객체가 여전히 None 또는 비어있는 경우

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

, 나는 당신이 당신의 코드를 디버깅 시작하는 것이 좋습니다 것입니다. django_extensions을 설치하고 ./manage.py runserver_plus으로 개발 서버를 실행하면이 예외에 대한 훌륭한 대화식 스택 추적을 얻을 수 있습니다. 또는 code with pdb을 디버그 할 수도 있습니다.

+0

사용자 정의 백엔드를 사용하고 있으며 first_name 및 last_name을 저장할 수있었습니다. 다음'데프 clean_dob (자기) : \t \t DOB = self.cleaned_data.get ('DOB') \t \t 인쇄 dob' 내 forms.py에 오류가 발생하기 전에 올바른 형식으로 날짜를 인쇄합니다. 아직도 해결책. –

+0

내 답변 끝에있는 디버깅 노트를 참조하십시오. – Haes

+0

트릭을 한 후 백엔드에 저장해 주셔서 감사합니다. 위의 내 솔루션을 참조하십시오. 내가보기를 사용자 지정하는 것을 피하려고했습니다. 나는 어떤 이유도 알지 못했다. –