如何使用Django模板语言的JQuery Datepicker
看了这个链接并找到了一些帮助,但我想知道如何为我的models.py中的DateField选择使用JQueryUI Datepicker小部件
models.py
from django.db import models class EModel(models.Model): date = models.DateField(blank=False)
forms.py
from django import forms from models import EModel class EForm(forms.ModelForm): class Meta: model = EModel
form.html – Django如何呈现我的表单。 不在管理页面中
Form
我希望有一种方法可以让我的’date’模型字段呈现为JQueryUI Datepicker小部件,但我已经搜索过,发现无法链接这两个(在我的情况下)。
解
在我的forms.py中
from django import forms from models import EModel class EForm(forms.ModelForm): class Meta: model = EModel widgets = { 'date' : forms.DateInput(attrs={'type':'date'}) }
在模型表单中编辑日期窗口小部件属性,为它们提供类“.datepicker”,因为这是JQuery datepicker将要查找的内容。 所以你的ModelForm变成了:
class EForm(forms.ModelForm): class Meta: model = EModel widgets = {'date': DateInput(attrs={'class': 'datepicker'})}
文档在这里 。
我使用以下代码,它对我来说很好。 我已经提到了这个项目的所有文件,
models.py
from django.db import models class EModel(models.Model): date = models.DateField(blank=False)
forms.py
from django import forms from testApp.models import EModel class EForm(forms.ModelForm): class Meta: model = EModel widgets = {'date': forms.DateInput(attrs={'class': 'datepicker'})}
form.html
Form
views.py
from django.shortcuts import render from django.http import HttpResponse from django.template import Context from django.shortcuts import render_to_response from django.http import HttpResponseRedirect from django.core.context_processors import csrf from django.template import RequestContext from forms import EForm def datepickerview(request): # Get the context from the request. context = RequestContext(request) # A HTTP POST? if request.method == 'POST': form = EForm(request.POST) # Have we been provided with a valid form? if form.is_valid(): form.save(commit=True) return HttpResponse("Successfully added the date to database"); else: # The supplied form contained errors - just print them to the terminal. print form.errors else: # If the request was not a POST, display the form to enter details. form = EForm() return render_to_response('form.html', {'form': form}, context)
urls.py
from django.conf.urls import patterns, include, url from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', url(r'^datepickerview/$', 'testApp.views.datepickerview'), )
admin.py
from django.contrib import admin from testApp.models import EModel admin.site.register(EModel)
最好的方法是在应用程序的widgets.py文件中创建一个新的小部件:
这是我的颜色选择器的一个例子:
– widgets.py –
from django import forms from django.conf import settings from django.utils.safestring import mark_safe class ColorPickerWidget(forms.TextInput): class Media: css = { 'all': ( settings.STATIC_URL + 'colorpicker/css/colorpicker.css', ) } js = ( settings.STATIC_URL + 'js/jquery-1.8.3.min.js', settings.STATIC_URL + 'colorpicker/js/colorpicker.js', ) def __init__(self, language=None, attrs=None): self.language = language or settings.LANGUAGE_CODE[:2] super(ColorPickerWidget, self).__init__(attrs=attrs) def render(self, name, value, attrs=None): rendered = super(ColorPickerWidget, self).render(name, value, attrs) return rendered + mark_safe(u''' ''' % (name, name, name))
— views.py —
from django import forms ColorPickerWidget from myapp.widgets import class EditBackgroundForm(forms.Form): background = forms.CharField(max_length=10, widget= ColorPickerWidget(), required = False, label="Background color")
此外,您还可以使用小部件创建自定义表单字段,并覆盖其clean()
方法。