2013-03-08 82 views
3

我在我的模型中有一个DateTime字段,我正在寻找一种简单的方法使它在表单中看起来不错。类似SelectDateWidgetDjango DateTimeField输入形式

我一直在寻找很多类似的问题,看起来非常棘手,让管理员datepicker或jquery的工作。 (这是我第一次使用Django,并且从未使用过jquery)。

因此,我使用ChoiceField而不是从this的例子,但我无法让它工作。我得到错误名称'自我'未定义。我在这里不能使用self吗?还是有一些更好的简单的方式来做到这一点?我不需要花哨的日期选择器,只是让输入变得容易。

class ProjectForm(ModelForm): 
    startdate = forms.DateField() 
    starthour = forms.ChoiceField(choices=((6,"6am"),(7,"7am"),(8,"8am"),(9,"9am"), ...)) 
    startminute = forms.ChoiceField(choices=((0,":00"),(15,":15"),(30,":30"),(45,":45"))) 

    class Meta: 
     model = Project 

    def clean(self): 
     starttime = time(int(self.cleaned_data.get('starthour')), 
         int(self.cleaned_data.get('startminute'))) 
     return self.cleaned_data 

    try: 
     self.instance.start_time = datetime.datetime.combine(
      self.cleaned_data.get("startdate"), starttime) 
    except TypeError: 
     raise forms.ValidationError("") 
+0

Youy'try'块应该在'clean'功能下。 – Ahsan 2013-03-08 10:43:18

回答

7

forms.py

from django import forms 
from django.contrib.admin import widgets          

class MyForm(forms.ModelForm): 
    class Meta: 
     model = MyModel 

    def __init__(self, *args, **kwargs): 
     super(MyForm, self).__init__(*args, **kwargs) 
     self.fields['mydate'].widget = widgets.AdminDateWidget() 
     self.fields['mytime'].widget = widgets.AdminTimeWidget() 
     self.fields['mydatetime'].widget = widgets.AdminSplitDateTime() 

模板:

<script type="text/javascript" src="/my_admin/jsi18n/"></script> 
<script type="text/javascript" src="/media/admin/js/core.js"></script> 

对于1.4+

{% load static %} 

<link rel="stylesheet" type="text/css" 
    href="{% static 'admin/css/forms.css' %} "/> 
<link rel="stylesheet" type="text/css" 
    href="{% static 'admin/css/base.css' %} "/> 
<link rel="stylesheet" type="text/css" 
    href="{% static 'admin/css/global.css' %}"/> 
<link rel="stylesheet" type="text/css" 
    href="{% static 'admin/css/widgets.css' %}"/> 


<script type="text/javascript" 
    src="/admin/jsi18n/"></script> 
<script type="text/javascript" 
    src="{% static 'admin/js/core.js' %}"></script> 
<script type="text/javascript" 
    src="{% static 'admin/js/admin/RelatedObjectLookups.js' %}"></script> 
<script type="text/javascript" 
    src="{% static 'admin/js/jquery.js' %}"></script> 
<script type="text/javascript" 
    src="{% static admin/js/jquery.init.js' %}"></script> 
<script type="text/javascript" 
    src="{% static 'admin/js/actions.js' %}"></script> 
<script type="text/javascript" 
    src="{% static 'admin/js/calendar.js' %}"></script> 
<script type="text/javascript" 
    src="{% static 'admin/js/admin/DateTimeShortcuts.js' %}"></script> 
+0

谢谢!但我得到错误'自我'没有定义。而且我没有forms.py,我有models.py中的表单,这有什么关系吗? – ana 2013-03-08 11:01:56

+0

而且我必须有一个日期和时间的字段,或者我可以只有一个字段表单日期时间? – ana 2013-03-08 11:04:28

+0

如果你想只使用日期时间,它可以,其他只是例子 – catherine 2013-03-08 11:12:44

1

,如果你坚持错误 “无法从'admin/js/jquery.init.js''”解析余数:'/js/jquery.init.js''。 只需在'admin/js/jquery.init.js' 之前添加apstrophe就会看起来像:'admin/js/jquery.init.js'