diff options
Diffstat (limited to 'ishtar/furnitures/widgets.py')
-rw-r--r-- | ishtar/furnitures/widgets.py | 48 |
1 files changed, 33 insertions, 15 deletions
diff --git a/ishtar/furnitures/widgets.py b/ishtar/furnitures/widgets.py index bbcb58423..fd9077b5e 100644 --- a/ishtar/furnitures/widgets.py +++ b/ishtar/furnitures/widgets.py @@ -23,9 +23,10 @@ from django.forms.widgets import flatatt from django.utils.encoding import smart_unicode
from django.utils.html import escape
from django.utils.simplejson import JSONEncoder
+from django.core.urlresolvers import resolve
class JQueryAutoComplete(forms.TextInput):
- def __init__(self, source, options={}, attrs={}):
+ def __init__(self, source, associated_model=None, options={}, attrs={}):
"""
Source can be a list containing the autocomplete values or a
string containing the url used for the request.
@@ -33,6 +34,7 @@ class JQueryAutoComplete(forms.TextInput): self.options = None
self.attrs = {}
self.source = source
+ self.associated_model = associated_model
if len(options) > 0:
self.options = JSONEncoder().encode(options)
self.attrs.update(attrs)
@@ -49,29 +51,45 @@ class JQueryAutoComplete(forms.TextInput): raise ValueError('source type is not valid')
options = 'source : ' + source
options += ''', select: function( event, ui ) {
- $("#result").html(ui.item ?
- "Selected: " + ui.item.value + " aka " + ui.item.id :
- "Nothing selected, input was " + this.value );
- },minLength: 2
-
- '''
+ if(ui.item){
+ $('#id_%s').val(ui.item.id);
+ } else {
+ $('#id_%s').val(null);
+ }
+ }, minLength: 2
+ ''' % (field_id, field_id)
if self.options:
options += ',%s' % self.options
- return u'$(\'#%s\').autocomplete({%s});' % (field_id, options)
+ js = u'$(\'#id_select_%s\').autocomplete({%s});\n' % (field_id, options)
+ return js
def render(self, name, value=None, attrs=None):
- final_attrs = self.build_attrs(attrs, name=name)
- if value:
- final_attrs['value'] = escape(smart_unicode(value))
+ attrs_hidden = self.build_attrs(attrs, name=name)
+ attrs_select = self.build_attrs(attrs)
+ if value:
+ val = escape(smart_unicode(value))
+ attrs_hidden['value'] = val
+ attrs_select['value'] = val
+ if self.associated_model:
+ try:
+ attrs_select['value'] = unicode(self.associated_model.\
+objects.get(pk=value))
+ except:
+ attrs_select['value'] = ""
if not self.attrs.has_key('id'):
- final_attrs['id'] = 'id_%s' % name
- return u'''<input %(attrs)s/><p id="result"></p>
+ attrs_hidden['id'] = 'id_%s' % name
+ attrs_select['id'] = 'id_select_%s' % name
+ if 'class' not in attrs_select:
+ attrs_select['class'] = 'autocomplete'
+ return u'''<input%(attrs_select)s/>\
+<input type="hidden"%(attrs_hidden)s/>\
<script type="text/javascript"><!--//
$(function() {%(js)s});//--></script>
''' % {
- 'attrs' : flatatt(final_attrs),
- 'js' : self.render_js(final_attrs['id']),
+ 'attrs_select' : flatatt(attrs_select),
+ 'attrs_hidden' : flatatt(attrs_hidden),
+ 'js' : self.render_js(name),
}
|