2012-04-21 3 views
0

모델이 User이고 모델이 Thing입니다. User은 0 이상 Thing을 소유 할 수 있습니다. Thing은 0 이상 User으로 소유 할 수 있습니다. 일반적으로 나는 Thing의에 세 번째 테이블에 Thing_Ownership 연결 User의를 추가하지만 난 내가 User 예를 george이 있다면 내가 george.inventory를 호출 할 수 있도록 george에 속하는 Thing의 목록을 가져올 수 SQLAlchemy의의 역 참조 기능을 활용하고자하는 .연결 테이블/모델이없는 다 대다 관계

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 아니면 제 3의 모델을 추가하고 User.inventory을 검색하여 관련 관계에 대한 Thing_Ownership 모델을 통해 구현해야합니까?

답변

3

Many to Many 관계에 대한 SQLAlchemy의 설명서를 확인하십시오. 귀하가 찾고자하는 것과 정확히 일치해야합니다. 당신이 UserThing에 대한 모델이있는 경우

그래서, 당신은 당신의 관계에서 보조 매개 변수를 설정할 수 있습니다

from sqlalchemy import Table, Integer, Column, ForeignKey 
from sqlalchemy.orm import relationship, backref 
from sqlalchemy.ext.declarative import declarative_base 

Base = declarative_base() 

association_table = Table('association', Base.metadata, 
    Column('user_id', Integer, ForeignKey('user.id')), 
    Column('thing_id', Integer, ForeignKey('thing.id')) 
) 

class User(Base): 
    __tablename__ = 'user' 
    # Whatever you need in this model 
    inventory = relationship('Thing', secondary = association_table, backref = 'users') 

class Thing(Base): 
    __tablename__ = 'thing' 
    # Whatever you need in this model 

그런 다음 호출하여 george로 인스턴스화 User에 속하는 Thing s의 목록에 액세스 할 수 있습니다 george.inventory.

희망이 도움이됩니다.

편집 : 질문을 다시 읽고 backref을 사용하고 싶다는 것을 알았습니다.
편집 2 : 정말 중요한 부분을 버렸습니다.