2009-05-01 6 views
6

का उपयोग कर Django फॉर्म फ़ील्ड मैंने Django से नवीनतम एसवीएन शाखा स्थापित की है जिसमें नए रूप शामिल हैं। मैं django.forms.extras.widgets से SelectDateWidget का उपयोग करने का प्रयास कर रहा हूं लेकिन फ़ील्ड एक सामान्य DateInput विजेट के रूप में दिखाई दे रहा है।SelectDateWidget

from django import forms 
from jacob_forms.models import Client 

class ClientForm(forms.ModelForm): 
    DOB = forms.DateField(widget=forms.extras.widgets.SelectDateWidget) 

    class Meta: 
      model = Client 

क्या मैं गलत कर रहा हूँ:

यहाँ मेरी आवेदन से forms.py है? फॉर्म/एक्स्ट्रा/widgets.py जांचना मुझे लगता है कि SelectDateWidget क्लास मौजूद है।

उत्तर

10

असली समस्या यह थी कि SelectDateWidget को इस तरह से संदर्भित नहीं किया जा सकता है। कोड बदलने के संदर्भ के लिए इसे दूसरे तरीके से मेरी समस्या हल:

from django.forms import extras 
... 
    DOB = forms.DateField(widget=extras.SelectDateWidget) 

यह एक सीमा यह है कि यदि आप किसी आयातित पैकेज से package.package.Class संदर्भ नहीं दे सकता हो रहा है। समाधान अतिरिक्त आयात करता है इसलिए संदर्भ सिर्फ पैकेज है। क्लास।

4

टिकट फिर से: यहां SelectDateWidget के लिए दस्तावेज़ की कमी: Ticket #7437

ऐसा लगता है कि आप इस तरह से इसका इस्तेमाल करने की जरूरत है:

widget=forms.extras.widgets.SelectDateWidget() 

नोट कोष्ठकों उदाहरण है।

+1

अच्छा सुझाव है, लेकिन आप वास्तव में जब तक आप विशिष्ट विन्यास पैरामीटर विजेट के निर्माता आप चाहते हैं जब आप विशेषता के रूप में इसे पारित विजेट वर्ग का दृष्टांत की जरूरत नहीं है, रखने के लिए। डीजेंगो फॉर्म फ्रेमवर्क वास्तव में यह देखने के लिए जांच करता है कि विजेट एक वर्ग या उदाहरण है, और यदि आवश्यक हो तो इसे आपके लिए तत्काल कर देगा। –

+0

दुर्भाग्यवश यह काम नहीं किया, जारेट सही है। – timbonicus

0

आपका कोड मेरे लिए लिखित रूप में ठीक काम करता है। इस तरह के मामले में, मॉडल और फॉर्म में फ़ील्ड के नाम के बीच विसंगतियों की जांच करें (DOB बनाम dob बनाना एक आसान टाइपो है), और आपने अपने दृश्य में सही फॉर्म को तुरंत चालू कर दिया है, और इसे पास कर दिया है टेम्पलेट।

+0

एक दृश्य के साथ फ़ॉर्म को इंस्टेंट करने से समस्या हल हो गई, या कम से कम मुझे अन्य, अधिक रोमांचक समस्याओं का सामना करना पड़ा। :) मुझे यह गलत समझ था कि यह कैसे काम करता है। – timbonicus

1

यहाँ form.py

from django import forms 
from django.forms import extras 

DOY = ('1980', '1981', '1982', '1983', '1984', '1985', '1986', '1987', 
     '1988', '1989', '1990', '1991', '1992', '1993', '1994', '1995', 
     '1996', '1997', '1998', '1999', '2000', '2001', '2002', '2003', 
     '2004', '2005', '2006', '2007', '2008', '2009', '2010', '2011', 
     '2012', '2013', '2014', '2015') 


DOB = forms.DateField(widget=extras.SelectDateWidget(years = DOY))