Postgresql Web2py:对id字段以外的字段使用引用

Postgresql Web2py:对id字段以外的字段使用引用,postgresql,data-access-layer,web2py,Postgresql,Data Access Layer,Web2py,我从web2pydal文档中看到,要向字段添加外键引用,我必须指定 db.define_table('thing', Field('name'), Field('owner_id', 'reference person')) 人的模式将在哪里 db.define_table('person', Field('name'), format='%(name)s') 此引

我从web2pydal文档中看到,要向字段添加外键引用,我必须指定

db.define_table('thing',
                Field('name'),
                Field('owner_id', 'reference person'))
人的模式将在哪里

db.define_table('person',
                Field('name'),
                format='%(name)s')
此引用语法的问题在于,默认情况下,它假定基表中引用字段的id为。假设我想让thing表中的某个属性引用person的name属性(或id以外的任何属性),有没有办法做到这一点


我使用的是一个遗留数据库,它本身有一个id,不能用web2py创建的id字段重置此id。

web2py创建的表使用“id”字段作为主键,因此引用字段设置了一个引用“id”字段的外键约束

如果旧版数据库表中的主键是一个自动递增的整数字段,但恰好没有命名为“id”,则您仍然可以让Web2通过指定“id”字段类型将该字段用作主键:

db.define_table('legacy_table',
    Field('my_id', 'id'), ...)

但是,如果主键不是单个自动递增的整数字段,则应查看上的文档。您可以指定表的主键,在这种情况下,web2py不会创建或期望一个“id”字段。但是,在功能上有一些限制。

谢谢你的回答,安东尼。你能简要介绍一下限制是什么吗?我在文档中也没有找到限制的详细信息。请参阅本书该部分末尾的要点。主要限制是键控表只能引用其他键控表。此外,
update\u record
方法不适用于键控表的行。