Tie, kuri izmanto Django savu web lapu izstrādē, vai arī vēlas to izmantot iespējams zin, ka kādu laiciņu jau ir pieejama jauna formu veidošanas bibliotēka newforms. Viens no jauninājumiem ir tas, ka ir iespējams norādīt widgetu katram formas elementam. Widgets var būt kāds no jau esošajiem, kā arī pašu veidots.

Tā, kā es esmu sācis izmantot script.aculo.us javascript bibliotēku, tad radās nepieciešamība izmantot burvīgo Ajax.Autocompleter lauku arī iekš Django, tad nu rezultāts ir sekojošs.

from django import newforms as forms
          from django.newforms.widgets import TextInput,flatatt
          from django.newforms.util import smart_unicode
          from django.utils.html import escape
          
          class AutoCompleteField(TextInput):
          	def __init__(self,url='', options='{}',attrs={}):
          		self.url	 = url
          		self.options = options
          		self.attrs	 = attrs
          	
          	def render(self, name, value=None, attrs=None):
          		final_attrs = self.build_attrs(attrs, name=name)
          		if value:
          			value = smart_unicode(value)
          			final_attrs['value'] = escape(value)
          		if not self.attrs.has_key('id'): final_attrs['id'] = 'id_%s' % name	
          		return u'<input /> <div class="autocomplete" id="box_%(name)s"></div> <script type="text/javascript">new Ajax.Autocompleter(\'%(id)s\', \'box_%(name)s\', \'%(url)s\', %(options)s);</script>' % {
          			'attrs'	: flatatt(final_attrs),
          			'name'	: name,
          			'id'	: final_attrs['id'],
          			'url'	: self.url,
          			'options' : self.options
          		}
          

Lai izmantotu šo widgetu, to nepieciešams saglabāt savā projektā un importēt attiecīgā vietā.

from myproject.widgets import AutoCompleteField
          .....
          person	= forms.CharField(label='Person',required=False,widget=AutoCompleteField(url='/person/autocomplete/'))
          .....
          

Tik nevajadzētu piemirst, ka vispirms lapas head ir jaievieto attiecīgie javascript faili.