def _create_references(self):
db = self._db
pr = db._pending_references
self._referenced_by = []
for field in self:
fieldname = field.name
field_type = field.type
if isinstance(field_type,str) and field_type[:10] == 'reference ':
ref = field_type[10:].strip()
if not ref.split():
raise SyntaxError('Table: reference to nothing: %s' %ref)
refs = ref.split('.')
rtablename = refs[0]
if not rtablename in db:
pr[rtablename] = pr.get(rtablename,[]) + [field]
continue
rtable = db[rtablename]
if len(refs)==2:
rfieldname = refs[1]
if not hasattr(rtable,'_primarykey'):
raise SyntaxError(
'keyed tables can only reference other keyed tables (for now)')
if rfieldname not in rtable.fields:
raise SyntaxError(
"invalid field '%s' for referenced table '%s' in table '%s'" \
% (rfieldname, rtablename, self._tablename))
rtable._referenced_by.append(field)
for referee in pr.get(self._tablename,[]):
self._referenced_by.append(referee)
评论列表
文章目录