2013-03-08 78 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'