diff --git a/VERSION b/VERSION index 88c016aa..63d32361 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Version 2.6.0-development+timestamp.2013.07.30.09.11.35 +Version 2.6.0-development+timestamp.2013.07.31.11.24.32 diff --git a/gluon/dal.py b/gluon/dal.py index 78839328..211ff2d5 100644 --- a/gluon/dal.py +++ b/gluon/dal.py @@ -8371,19 +8371,20 @@ class Table(object): self._referenced_by = [] for field in self: fieldname = field.name - field_type = field.type + field_type = field.type if isinstance(field_type,str) and field_type[:10] == 'reference ': ref = field_type[10:].strip() - if not ref.split(): + if not ref.strip(): raise SyntaxError('Table: reference to nothing: %s' %ref) - refs = ref.split('.') - rtablename = refs[0] + if '.' in ref: + rtablename, rfieldname = ref.split('.',1) + else: + rtablename, rfieldname = ref, None if not rtablename in db: pr[rtablename] = pr.get(rtablename,[]) + [field] continue rtable = db[rtablename] - if len(refs)==2: - rfieldname = refs[1] + if rfieldname: if not hasattr(rtable,'_primarykey'): raise SyntaxError( 'keyed tables can only reference other keyed tables (for now)') @@ -8391,7 +8392,13 @@ class Table(object): raise SyntaxError( "invalid field '%s' for referenced table '%s' in table '%s'" \ % (rfieldname, rtablename, self._tablename)) + rfield = rtable[rfieldname] + else: + rfield = rtable._id rtable._referenced_by.append(field) + field.referent = rfield + else: + field.referent = None for referee in pr.get(self._tablename,[]): self._referenced_by.append(referee)