سؤال

ولقد قمت بتركيب أحدث فرع 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 هو الخطأ المطبعي سهلة لجعل)، وبعد أن كنت قد مثيل النموذج الصحيح من وجهة نظرك، ونقلوها إلى القالب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top