diff --git a/VERSION b/VERSION index b38dd556..e4ae78b6 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Version 2.2.1 (2012-12-02 08:26:35) stable +Version 2.2.1 (2012-12-03 08:15:18) stable diff --git a/gluon/dal.py b/gluon/dal.py index 3eb19c37..88e5bd88 100644 --- a/gluon/dal.py +++ b/gluon/dal.py @@ -6566,11 +6566,13 @@ def smart_query(fields,text): (' not equal ','!='), (' equal to ','='), (' equal ','='), - (' equals ','!='), + (' equals ','='), (' less than ','<'), (' greater than ','>'), (' starts with ','startswith'), (' ends with ','endswith'), + (' not in ' , 'notbelongs'), + (' in ' , 'belongs'), (' is ','=')]: if a[0]==' ': text = text.replace(' is'+a,' %s ' % b) @@ -6605,6 +6607,8 @@ def smart_query(fields,text): elif op == '<=': new_query = field<=value elif op == '>=': new_query = field>=value elif op == '!=': new_query = field!=value + elif op == 'belongs': new_query = field.belongs(value.split(',')) + elif op == 'notbelongs': new_query = ~field.belongs(value.split(',')) elif field.type in ('text','string'): if op == 'contains': new_query = field.contains(value) elif op == 'like': new_query = field.like(value) @@ -7175,7 +7179,7 @@ def index(): table._actual = True self[tablename] = table # must follow above line to handle self references - table._create_references() + table._create_references() migrate = self._migrate_enabled and args_get('migrate',self._migrate) if migrate and not self._uri in (None,'None') \ diff --git a/gluon/sqlhtml.py b/gluon/sqlhtml.py index e6d70b3c..9b570a79 100644 --- a/gluon/sqlhtml.py +++ b/gluon/sqlhtml.py @@ -1561,15 +1561,15 @@ class SQLFORM(FORM): def search_menu(fields, search_options=None): T = current.T search_options = search_options or { - 'string': ['=', '!=', '<', '>', '<=', '>=', 'starts with', 'contains'], - 'text': ['=', '!=', '<', '>', '<=', '>=', 'starts with', 'contains'], + 'string': ['=', '!=', '<', '>', '<=', '>=', 'starts with', 'contains', 'in', 'not in'], + 'text': ['=', '!=', '<', '>', '<=', '>=', 'starts with', 'contains', 'in', 'not in'], 'date': ['=', '!=', '<', '>', '<=', '>='], 'time': ['=', '!=', '<', '>', '<=', '>='], 'datetime': ['=', '!=', '<', '>', '<=', '>='], - 'integer': ['=', '!=', '<', '>', '<=', '>='], + 'integer': ['=', '!=', '<', '>', '<=', '>=', 'in', 'not in'], 'double': ['=', '!=', '<', '>', '<=', '>='], - 'id': ['=', '!=', '<', '>', '<=', '>='], - 'reference': ['=', '!=', '<', '>', '<=', '>='], + 'id': ['=', '!=', '<', '>', '<=', '>=', 'in', 'not in'], + 'reference': ['=', '!=', '<', '>', '<=', '>=', 'in', 'not in'], 'boolean': ['=', '!=']} if fields[0]._db._adapter.dbengine == 'google:datastore': search_options['string'] = ['=', '!=', '<', '>', '<=', '>='] @@ -2268,7 +2268,7 @@ class SQLFORM(FORM): if callable(rid): # can this ever be callable? rid = rid(row) tr = TR(*trcols, **dict( - _id=rid, + _id=rid, _class='%s %s' % (classtr, 'with_id'))) else: tr = TR(*trcols, **dict(_class=classtr)) @@ -2343,7 +2343,7 @@ class SQLFORM(FORM): table: pagination, search, view, edit, delete, children, parent, etc. - constraints is a dict {'table',query} that limits which + constraints is a dict {'table':query} that limits which records can be accessible links is a dict like {'tablename':[lambda row: A(....), ...]}