2014-10-18 58 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