2014-10-18 76 views
2

我無法在窗體中添加管理日曆窗口小部件。怎麼做?django以自定義形式管理日期時間窗口小部件(日曆)

model.py

from django.db import models 
from django.contrib.auth.models import User 


FIELDNUM = (('1', '1'), ('2', '2'), ('3', '3'), 
      ('4', '4'), ('5', '5'), ('6', '6'), ('7', '7'), ('8', '8'), 
      ('9', '9'), ('10', '10')) 

FIELDNAMES = (('test', 'test'), ('kostas', 'kostas'), ('kaka', 'kaka')) 

class Reservation(models.Model): 
    field_name = models.CharField("Field Name*", choices=FIELDNAMES, max_length=100) 
    fieldnum = models.CharField("Field Number*", choices=FIELDNUM, max_length=2) 
    date = models.DateField("Date*") 
    time = models.TimeField("Time*") 
    user = models.ForeignKey(User) 
    date_time = models.DateTimeField(auto_now_add=True, blank=True, unique=False) 

    def __unicode__(self): 
     return '%s, %s, %s, %s' % (self.field_name, self.date, self.time, self.date_time) 

    class Meta: 
     unique_together = ("field_name", "fieldnum", "date", "time") 

form.py

from django import forms 
from booking.models import Reservation 

class ReservationForm(forms.ModelForm): 
    class Meta: 
     model = Reservation 
     exclude = ['user'] 

我呈現我的形式,在我的模板段。

在哪裏調用小部件,以及如何將它設置在我的模板中以使其工作?

+1

可能[重複](http://stackoverflow.com/questions/38601/using-django-time-date-widgets-in-custom-form) – 2014-10-18 18:49:15

回答

1

我認爲最簡單的方法不是使用來自django.contrib.admin.widgets的小部件,而是使用來自jQuery UI的第三方小部件,例如Datepicker

所有你需要做的是包括在您的模板jQuery UI並添加這個腳本

<script> 
    $(function() { 
    $(".date_picker").datepicker(); 
    }); 
</script> 

哪裏.date_picker是階級關係到你的Reservation模型date領域的形式輸入的名稱。

爲了讓Django將此class='date_picker'添加到與date相關的生成表單輸入中,您必須稍微修改ModelForm。更具體地講,

from django import forms 
from booking.models import Reservation 

class ReservationForm(forms.ModelForm): 
    class Meta: 
     model = Reservation 
     exclude = ['user'] 
     widgets = { 
      'date' : forms.DateInput(attrs={'class' : 'date_picker'}) 
     } 

這將對渲染<input type='text' ... class='date_picker' />的效果,當你在你的模板調用{{ form.as_p }}和jQuery UI沒有休息。

順便說一下,你的models.py的一個小改進就是使用python的列表理解。即

FIELDNUM = (('1', '1'), ('2', '2'), ('3', '3'), 
     ('4', '4'), ('5', '5'), ('6', '6'), ('7', '7'), ('8', '8'), 
     ('9', '9'), ('10', '10')) 

相當於

FIELDNUM = [(str(i), str(i)) for i in range(1,11)] 
+0

抱歉,但我沒有得到它。你可以請解釋如何使用這個在我的模板中,當我呈現我的表單,如'代碼'

{%csrf_token%} {{form.as_p }}
kostas1987 2014-10-19 20:33:09

+0

抱歉,但我沒有得到它。你可以請解釋如何在我的模板中使用這個時,當我呈現我的表單像這樣

{%csrf_token%} {{form.as_p}}
kostas1987 2014-10-19 20:46:20

+1

我做了你的建議,但我沒有得到我的表單中的datepicker – kostas1987 2014-10-20 15:51:02

相關問題