2009-05-01 41 views
6

Tôi đã cài đặt chi nhánh SVN mới nhất từ ​​Django bao gồm các biểu mẫu mới. Tôi đang cố gắng sử dụng SelectDateWidget từ django.forms.extras.widgets nhưng trường được hiển thị như một widget DateInput bình thường.Trường biểu mẫu Django sử dụng SelectDateWidget

Đây là forms.py từ ứng dụng của tôi:

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 

Tôi đang làm gì sai? Kiểm tra các biểu mẫu/extras/widgets.py Tôi thấy lớp SelectDateWidget tồn tại.

Trả lời

10

Vấn đề thực sự là SelectDateWidget không thể được tham chiếu theo cách này. Việc thay đổi mã để tham chiếu nó đã giải quyết được sự cố của tôi một cách khác nhau:

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

Điều này có vẻ là hạn chế mà bạn không thể tham khảo package.package.Class từ gói được nhập. Các giải pháp nhập khẩu extras để tham khảo chỉ là package.Class.

4

Từ tái vé: thiếu tài liệu cho SelectDateWidget đây: Ticket #7437

Có vẻ như bạn cần phải sử dụng nó như thế này:

widget=forms.extras.widgets.SelectDateWidget() 

Lưu ý các dấu ngoặc đơn là ví dụ.

+1

Gợi ý tốt, nhưng bạn thực sự không cần phải nhanh chóng lớp Widget khi bạn vượt qua nó như là thuộc tính, trừ khi bạn có các thông số cấu hình cụ thể mà bạn muốn điều đó constructor phụ tùng của có. Khuôn khổ biểu mẫu django thực sự kiểm tra xem widget có phải là một lớp hay một cá thể, và sẽ khởi tạo nó cho bạn nếu cần thiết. –

+0

Thật không may điều này đã không làm việc, Jarret là chính xác. – timbonicus

0

Mã của bạn hoạt động tốt cho tôi như được viết. Trong trường hợp như vậy, hãy kiểm tra sự không khớp giữa tên của trường trong mô hình và biểu mẫu (DOB so với dob là cách dễ dàng để thực hiện) và bạn đã tạo biểu mẫu đúng trong chế độ xem của mình và chuyển nó đến bản mẫu.

+0

Việc khởi tạo biểu mẫu với chế độ xem đã giải quyết được vấn đề hoặc ít nhất đã dẫn tôi đến các vấn đề khác, thú vị hơn. :) Tôi đã hiểu sai về cách làm việc này. – timbonicus

1

Đây là 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)) 
Các vấn đề liên quan