2012-01-05 5 views
5

सहेजने की बचत नहीं है मैं पंजीकरण पर जन्म तिथि बचाने के लिए डीजेंगो-पंजीकरण के साथ SelectDateWidget का उपयोग कर रहा हूं। मैंने जन्मदिन को छोड़कर कोशिश की है और प्रोफ़ाइल को अतिरिक्त डेटा के साथ बनाया और सहेजा गया है। मुझे पूरा यकीन नहीं है कि सब कुछ गलत हो रहा है।Django 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 नहीं हो सकता नल

पोस्ट डेटा 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

cleaned databound 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 को डीबग भी कर सकते हैं।

+0

मैं एक कस्टम बैकएंड का उपयोग कर रहा हूं और मैं पहले_नाम और अंतिम_नाम को सहेजने में सक्षम हूं। निम्नलिखित: 'डीईएफ़ clean_dob (स्वयं): \t \t जन्म तिथि = self.cleaned_data.get ('जन्म तिथि') \t \t प्रिंट dob' मेरी forms.py में सही स्वरूप में दिनांक प्रिंट से पहले त्रुटि तब होती है। अभी भी समाधान। –

+0

कृपया मेरे उत्तर के अंत में डिबगिंग नोट देखें। – Haes

+0

बैकएंड में आपकी सलाह बचाने के लिए आपको बहुत कुछ धन्यवाद। मेरे समाधान के लिए ऊपर देखें। मैं दृश्य को अनुकूलित करने से बचने की कोशिश कर रहा था। मुझे कोई कारण नहीं दिख रहा था। –

संबंधित मुद्दे