allow for IS_IN_DB(db,db.thing.id,db.thing.name)

This commit is contained in:
mdipierro
2015-12-27 02:46:23 -06:00
parent 0409d6f725
commit da22554aed
+13 -5
View File
@@ -22,7 +22,7 @@ import decimal
import unicodedata
from cStringIO import StringIO
from gluon.utils import simple_hash, web2py_uuid, DIGEST_ALG_BY_SIZE
from pydal.objects import FieldVirtual, FieldMethod
from pydal.objects import Field, FieldVirtual, FieldMethod
regex_isint = re.compile('^[+-]?\d+$')
@@ -512,13 +512,18 @@ class IS_IN_DB(Validator):
left=None
):
from pydal.objects import Table
if isinstance(field, Table):
field = field._id
if hasattr(dbset, 'define_table'):
self.dbset = dbset()
else:
self.dbset = dbset
if isinstance(field, Table):
field = field._id
elif isinstance(field, str):
items = field.split('.')
if len(items)==1: items+=['id']
field = self.dbset.db[items[0]][items[1]]
(ktable, kfield) = str(field).split('.')
if not label:
label = '%%(%s)s' % kfield
@@ -532,7 +537,8 @@ class IS_IN_DB(Validator):
else:
ks = [kfield]
fields = 'all'
self.fields = fields
self.field = field # the lookup field
self.fields = fields # fields requires to build the formatting
self.label = label
self.ktable = ktable
self.kfield = kfield
@@ -579,6 +585,8 @@ class IS_IN_DB(Validator):
self.theset = [str(r[self.kfield]) for r in records]
if isinstance(self.label, str):
self.labels = [self.label % r for r in records]
elif isinstance(self.label, Field):
self.labels = [r[self.label.name] for r in records]
else:
self.labels = [self.label(r) for r in records]