+9
-6
@@ -505,6 +505,7 @@ class IS_IN_DB(Validator):
|
|||||||
zero='',
|
zero='',
|
||||||
sort=False,
|
sort=False,
|
||||||
_and=None,
|
_and=None,
|
||||||
|
left=None
|
||||||
):
|
):
|
||||||
from pydal.objects import Table
|
from pydal.objects import Table
|
||||||
if isinstance(field, Table):
|
if isinstance(field, Table):
|
||||||
@@ -521,7 +522,7 @@ class IS_IN_DB(Validator):
|
|||||||
if regex1.match(str(label)):
|
if regex1.match(str(label)):
|
||||||
label = '%%(%s)s' % str(label).split('.')[-1]
|
label = '%%(%s)s' % str(label).split('.')[-1]
|
||||||
ks = regex2.findall(label)
|
ks = regex2.findall(label)
|
||||||
if not kfield in ks:
|
if kfield not in ks:
|
||||||
ks += [kfield]
|
ks += [kfield]
|
||||||
fields = ks
|
fields = ks
|
||||||
else:
|
else:
|
||||||
@@ -542,6 +543,7 @@ class IS_IN_DB(Validator):
|
|||||||
self.zero = zero
|
self.zero = zero
|
||||||
self.sort = sort
|
self.sort = sort
|
||||||
self._and = _and
|
self._and = _and
|
||||||
|
self.left = left
|
||||||
|
|
||||||
def set_self_id(self, id):
|
def set_self_id(self, id):
|
||||||
if self._and:
|
if self._and:
|
||||||
@@ -553,15 +555,16 @@ class IS_IN_DB(Validator):
|
|||||||
fields = [f for f in table]
|
fields = [f for f in table]
|
||||||
else:
|
else:
|
||||||
fields = [table[k] for k in self.fields]
|
fields = [table[k] for k in self.fields]
|
||||||
ignore = (FieldVirtual,FieldMethod)
|
ignore = (FieldVirtual, FieldMethod)
|
||||||
fields = filter(lambda f:not isinstance(f,ignore), fields)
|
fields = filter(lambda f: not isinstance(f, ignore), fields)
|
||||||
if self.dbset.db._dbname != 'gae':
|
if self.dbset.db._dbname != 'gae':
|
||||||
orderby = self.orderby or reduce(lambda a, b: a | b, fields)
|
orderby = self.orderby or reduce(lambda a, b: a | b, fields)
|
||||||
groupby = self.groupby
|
groupby = self.groupby
|
||||||
distinct = self.distinct
|
distinct = self.distinct
|
||||||
|
left = self.left
|
||||||
dd = dict(orderby=orderby, groupby=groupby,
|
dd = dict(orderby=orderby, groupby=groupby,
|
||||||
distinct=distinct, cache=self.cache,
|
distinct=distinct, cache=self.cache,
|
||||||
cacheable=True)
|
cacheable=True, left=left)
|
||||||
records = self.dbset(table).select(*fields, **dd)
|
records = self.dbset(table).select(*fields, **dd)
|
||||||
else:
|
else:
|
||||||
orderby = self.orderby or \
|
orderby = self.orderby or \
|
||||||
@@ -580,7 +583,7 @@ class IS_IN_DB(Validator):
|
|||||||
items = [(k, self.labels[i]) for (i, k) in enumerate(self.theset)]
|
items = [(k, self.labels[i]) for (i, k) in enumerate(self.theset)]
|
||||||
if self.sort:
|
if self.sort:
|
||||||
items.sort(options_sorter)
|
items.sort(options_sorter)
|
||||||
if zero and not self.zero is None and not self.multiple:
|
if zero and self.zero is not None and not self.multiple:
|
||||||
items.insert(0, ('', self.zero))
|
items.insert(0, ('', self.zero))
|
||||||
return items
|
return items
|
||||||
|
|
||||||
@@ -600,7 +603,7 @@ class IS_IN_DB(Validator):
|
|||||||
not self.multiple[0] <= len(values) < self.multiple[1]:
|
not self.multiple[0] <= len(values) < self.multiple[1]:
|
||||||
return (values, translate(self.error_message))
|
return (values, translate(self.error_message))
|
||||||
if self.theset:
|
if self.theset:
|
||||||
if not [v for v in values if not v in self.theset]:
|
if not [v for v in values if v not in self.theset]:
|
||||||
return (values, None)
|
return (values, None)
|
||||||
else:
|
else:
|
||||||
from pydal.adapters import GoogleDatastoreAdapter
|
from pydal.adapters import GoogleDatastoreAdapter
|
||||||
|
|||||||
Reference in New Issue
Block a user