This patch adds autocompletion on char fields by adding the
autocomplete keyword to fields.char. It works a bit like
on_change_with
Please review this at http://codereview.appspot.com/4271044/
Affected files:
M trytond/model/fields/char.py
M trytond/model/model.py
Index: trytond/model/fields/char.py
===================================================================
--- a/trytond/model/fields/char.py
+++ b/trytond/model/fields/char.py
@@ -3,6 +3,9 @@
from trytond.model.fields.field import Field
+def autocomplete_validate(value):
+ assert isinstance(value, list), 'autocomplete must be a list'
+
class Char(Field):
'''
@@ -13,7 +16,8 @@
def __init__(self, string='', size=None, help='', required=False,
readonly=False, domain=None, states=None, change_default=False,
translate=False, select=0, on_change=None, on_change_with=None,
- depends=None, order_field=None, context=None, loading='eager'):
+ depends=None, order_field=None, context=None, loading='eager',
+ autocomplete=None):
'''
:param translate: A boolean. If ``True`` the field is translatable.
:param size: A integer. If set defines the maximum size of the
values.
@@ -24,6 +28,17 @@
on_change=on_change, on_change_with=on_change_with,
depends=depends, order_field=order_field, context=context,
loading=loading)
+ self.__autocomplete = None
+ self.autocomplete = autocomplete if autocomplete else []
self.translate = translate
self.size = size
__init__.__doc__ += Field.__init__.__doc__
+
+ def _get_autocomplete(self):
+ return self.__autocomplete
+
+ def _set_autocomplete(self, value):
+ autocomplete_validate(value)
+ self.__autocomplete = value
+
+ autocomplete = property(_get_autocomplete, _set_autocomplete)
Index: trytond/model/model.py
===================================================================
--- a/trytond/model/model.py
+++ b/trytond/model/model.py
@@ -93,14 +93,12 @@
and not isinstance(field.selection, (list, tuple)) \
and field.selection not in self._rpc:
self._rpc[field.selection] = False
- if field.on_change:
- on_change = 'on_change_' + field_name
- if on_change not in self._rpc:
- self._rpc[on_change] = False
- if field.on_change_with:
- on_change_with = 'on_change_with_' + field_name
- if on_change_with not in self._rpc:
- self._rpc[on_change_with] = False
+
+ for attribute in
('on_change', 'on_change_with', 'autocomplete'):
+ if getattr(field, attribute, False):
+ function_name = '%s_%s' % (attribute, field_name)
+ if function_name not in self._rpc:
+ self._rpc[function_name] = False
def __getattr__(self, name):
# Search if a function exists in inherits parents
@@ -567,6 +565,7 @@
'on_change',
'add_remove',
'on_change_with',
+ 'autocomplete',
'sort',
'datetime_field',
'loading',
--
[email protected] mailing list