Tôi có hai bảng, tablet
và correspondent
:KeyError khi thêm đối tượng để SQLAlchemy đối tượng liên
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
tôi có thể thêm hồ sơ để tablet
và correspondent
, và làm ví dụ Tablet.query.first().correspondents
chỉ cần trả về một danh sách trống, như bạn mong đợi. Nếu tôi chèn một hàng vào bảng tablet_correspondent
của tôi bằng cách sử dụng bảng hiện tại và ID người tương ứng, danh sách sẽ được điền, một lần nữa như bạn mong đợi.
Tuy nhiên, nếu tôi cố gắng làm
cor = Correspondent.query.first()
tab = Tablet.query.first()
tab.correspondents.append(cor)
tôi nhận được:
KeyError: 'tablet_correspondents'
Tôi chắc chắn rằng tôi sẽ đi ra một cái gì đó khá tiểu học ở đây.
Tôi nghĩ '__tablename__ =" tablet_correspondent "của bạn sai.Không phải nó là 'tablet_correspondents' (với' s' ở cuối)? –