のキーワードのグラフのようなマッピングの種類を実装many to many
したいと思います。例えば、「りんご」は「みずみずしい果物」の子であると同時に、「りんご」は多くの「特定の種類のりんご」の親であり、「みずみずしい果物」はもちろん「食べられるもの」などの親が多いです。 "。要するに関係。そして、それらは両方ともキーワード class( ) のインスタンスです。私はそれを次のように定義しました、self referential
keyword net
many to many
self referential
kw2kw_table=Table('kw2kw_table',Base.metadata,
Column('child_id',Integer,ForeignKey('kw_table.id'),primary_key=True),
Column('parent_id',Integer,ForeignKey('kw_table.id'),primary_key=True),
)
class KW(Base):
__tablename__='kw_table'
id=Column(Integer,primary_key=True)
name=Column(Unicode(28),unique=True)
parents=relationship('KW',
secondary=kw2kw_table,
primaryjoin=id==kw2kw_table.c.child_id,
secondaryjoin=id==kw2kw_table.c.parent_id,
backref='children',
)
def __init__(self,name,parent=None):
self.name=name
self.children=[]
if parent==None: #default to a root keyword
self.parents.append(self)
else:
self.parents.append(parent)
私のビューファイルで:
...
keywordName = request.params['keyword']
parentName = request.params.get('parent',u'')
if parentName:
parent=DBSession.query(KW).filter(KW.name==parentName)
if parent: #if parent exists
new_kw=KW(keywordName,parent)
else:
parent=KW(parentName)
new_kw=KW(keywordName,parent)
else: #if the parent was not provided
new_kw=KW(keywordName)
DBSession.add(new_kw)
...
しかし、ビューがで送信されると(keyword,parent)
、エラーが発生しました:
File "build/bdist.macosx-10.6-intel/egg/sqlalchemy/orm/attributes.py", line 910, in fire_append_event
value = fn(state, value, initiator or self)
File "build/bdist.macosx-10.6-intel/egg/sqlalchemy/orm/attributes.py", line 1138, in emit_backref_from_collection_append_event
child_state, child_dict = instance_state(child), \
AttributeError: 'Query' object has no attribute '_sa_instance_state'
私はそれをグーグルで調べましたが、それを理解できませんでした。助けてください。