جانغو حقل النموذج باستخدام SelectDateWidget
سؤال
ولقد قمت بتركيب أحدث فرع SVN من جانغو التي تشمل أشكالا جديدة. أنا أحاول أن استخدام SelectDateWidget من django.forms.extras.widgets لكن الحقل يظهر على النحو القطعة DateInput العادية.
وهنا هو forms.py من طلبي:
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
وماذا أفعل الخطأ؟ التحقق من أشكال / الإضافات / widgets.py أرى وجود الطبقة SelectDateWidget.
المحلول
وكانت المشكلة الحقيقية التي SelectDateWidget لا يمكن الرجوع إليها بهذه الطريقة. تغيير رمز للرجوع إليه حلها بشكل مختلف مشكلتي:
from django.forms import extras
...
DOB = forms.DateField(widget=extras.SelectDateWidget)
ويبدو أن هذا القيد أنه لا يمكن الرجوع package.package.Class من حزمة المستوردة. الحل تستورد اشياء ذلك المرجع هو مجرد package.Class.
نصائح أخرى
ومن إعادة تذكرة: عدم وجود وثائق لSelectDateWidget هنا: تذكرة # 7437
ويبدو أنك في حاجة لاستخدامها مثل هذا:
widget=forms.extras.widgets.SelectDateWidget()
ملاحظة الأقواس هو المثال.
لماذا لا تستخدم forms.SelectDateWidget
. مجرد استخدامه كمرجع.
import datetime
from django import forms
class HistDateForm(forms.Form):
cur_year = datetime.datetime.today().year
year_range = tuple([i for i in range(cur_year - 2, cur_year + 2)])
hist_date = forms.DateField(initial=datetime.date.today() - datetime.timedelta(days=7),widget=forms.SelectDateWidget(years=year_range))
وهنا هو 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))
والتعليمات البرمجية الخاصة بك يعمل بشكل جيد بالنسبة لي كما هو مكتوب. في مثل هذه الحالة، تحقق من عدم التطابق بين اسم الحقل في النموذج والنموذج (DOB
مقابل dob
هو الخطأ المطبعي سهلة لجعل)، وبعد أن كنت قد مثيل النموذج الصحيح من وجهة نظرك، ونقلوها إلى القالب.