2012-01-05 19 views
5

Kayıt sırasında Doğum Tarihi kaydetmek için django kaydı ile SelectDateWidget kullanıyorum. Doğum gününü hariç tutmayı denedim ve bir profil oluşturuldu ve ekstra verilerle kaydedildi. Her şeyin yanlış gittiğinden emin değilim.Django SelectDateWidget kaydetme tarihi

models.py

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

forms.py kullanıcıyı kaydederken alıyorum hatadır

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 olmayabilir NULL

Gönderi verileri, dob_day, dob_month ve dob_year üretiyor. Verileri temizlemeye çalıştım ama boşuna. Herhangi bir yardım büyük takdir edilecektir. Çözüldü

:

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

cevap

5

formu hata yok ise, doğru tarih nesnesi içermelidir bound form örneğinden cleaned data. Form gönderildiğinde sonra, bir oluşturun:

kullanın bu tarih nesnesi Oldukça size kayıt formunu işlemek nasıl alamadım, ama genel olarak bu gibi işleri p.dob

atamak bağlı form, geçerli olduğundan emin olun ve sonra temizlenmiş form verisine erişin. Böyle bir şey: senin arka uç kullanarak kaydetmeye çalışırken dob tarih nesne hala None veya boşsa

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

, ben size kod hata ayıklama başlamak öneririm. Bu özel durumun güzel bir etkileşimli yığın izlemesi almak için django_extensions yükleyebilir ve ./manage.py runserver_plus numaralı bir geliştirme sunucusunu çalıştırabilirsiniz. Alternatif olarak, code with pdb'nu da ayıklayabilirsiniz.

+0

Özel bir arka uç kullanıyorum ve bir first_name ve last_name kaydedebildim. Aşağıdaki: 'def clean_dob (öz): \t \t dob = self.cleaned_data.get ('dob') \t \t baskı dob' benim forms.py hata oluşmadan önce doğru biçimde tarihini yazdırmak olduğunu. Hala çok çözüm. –

+0

Lütfen cevabımın sonunda hata ayıklama notlarına bakın. – Haes

+0

Tavsiye ederim o kadar çok teşekkür ederim. Çözümüm için yukarı bakın. Görünümü özelleştirmekten kaçınmaya çalışıyordum. Hiçbir sebep görmedim. –

İlgili konular