我有兩個表,tablet
和correspondent
:KeyError異常將對象添加到SQLAlchemy的關聯對象時
class Correspondent(db.Model, GlyphMixin):
# PK column and tablename etc. come from the mixin
name = db.Column(db.String(100), nullable=False, unique=True)
# association proxy
tablets = association_proxy('correspondent_tablets', 'tablet')
def __init__(self, name, tablets=None):
self.name = name
if tablets:
self.tablets = tablets
class Tablet(db.Model, GlyphMixin):
# PK column and tablename etc. come from the mixin
area = db.Column(db.String(100), nullable=False, unique=True)
# association proxy
correspondents = association_proxy('tablet_correspondents', 'correspondent')
def __init__(self, area, correspondents=None):
self.area = area
if correspondents:
self.correspondents = correspondents
class Tablet_Correspondent(db.Model):
__tablename__ = "tablet_correspondent"
tablet_id = db.Column("tablet_id",
db.Integer(), db.ForeignKey("tablet.id"), primary_key=True)
correspondent_id = db.Column("correspondent_id",
db.Integer(), db.ForeignKey("correspondent.id"), primary_key=True)
# relations
tablet = db.relationship(
"Tablet",
backref="tablet_correspondents",
cascade="all, delete-orphan",
single_parent=True)
correspondent = db.relationship(
"Correspondent",
backref="correspondent_tablets",
cascade="all, delete-orphan",
single_parent=True)
def __init__(self, tablet=None, correspondent=None):
self.tablet = tablet
self.correspondent = correspondent
我可以將記錄添加到tablet
和correspondent
,和例如在做如您所料,Tablet.query.first().correspondents
只是返回一個空列表。如果我使用現有的平板電腦和通訊員ID手動向我的tablet_correspondent
表中插入一行,則會按照您的預期重新填充列表。
但是,如果我嘗試做
cor = Correspondent.query.first()
tab = Tablet.query.first()
tab.correspondents.append(cor)
我得到:
KeyError: 'tablet_correspondents'
我敢肯定,我離開了一些相當基本這裏。
我想你'__tablename__ =「tablet_correspondent」'是錯誤的。它不應該是'tablet_correspondents'(最後是's')嗎? – 2012-06-18 23:31:57