我想链接一个表本身。我有媒体组可以包含更多的媒体组。我创建了多对多的关系:如何将一张桌子连接到自己?
media_group_groups = Table(
"media_group_groups",
metadata,
Column("groupA_id", Integer, ForeignKey("media_groups.id")),
Column("groupB_id", Integer, ForeignKey("media_groups.id"))
)
class MediaGroup(rdb.Model):
"""Represents MediaGroup class. Conteins channels and other media groups"""
rdb.metadata(metadata)
rdb.tablename("media_groups")
id = Column("id", Integer, primary_key=True)
title = Column("title", String(100))
parents = Column("parents", String(512))
channels = relationship(Channel, secondary=media_group_channels, order_by=Channel.titleView, backref="media_groups")
mediaGroup = relationship("MediaGroup", secondary=media_group_groups, order_by="MediaGroup.title", backref="media_groups")
我得到这个错误:
“引发ArgumentError:无法确定加入对关系MediaGroup.mediaGroup父/子表之间的条件指定一个‘primaryjoin’表达。如果这是一个多对多的关系,那么也需要'secondaryjoin'。“
当我创建表格时,我没有收到任何错误,只是当我向它添加任何元素时。 任何想法???
提前致谢!
我试过了,但我得到一个不同的错误: “引发ArgumentError:无法确定primaryjoin条件关系的方向。‘media_groups.id =:ID_1’,对关系MediaGroup.mediaGroup不要在‘foreign_keys’列代表只有这个连接条件中的'外部'列?“ 我试图解决它,但如果您有任何想法,请让我知道。 谢谢! – bribon 2010-08-12 18:47:11
看起来像backref的问题。调整我的答案。 – 2010-08-12 19:02:25
另请注意,这里的名称有点令人困惑。 'MediaGroup.mediaGroup'是'groupA'到'groupB'链接的列表,而'MediaGroup.media_groups'是'groupB'到'groupA'链接的列表。如果你确实需要backref,我会给它们命名为“子组”和“超级组”或者任何对你的模型有意义的东西。 – 2010-08-12 19:09:58