2013-03-03 2 views
0

나는이 테이블이 : 많은 많은에 1) 사용자SQLAlchemy의 : ValueError를

class User(Base): 
    __tablename__ = 'users' 
    id = Column(Integer, primary_key = True) 
    fname = Column(String(45)) 
    lname = Column(String(45)) 
    mail = Column(String(45)) 
    password = Column(String(45)) 

    courses = relationship("Course", secondary=user_course, backref="users") 
    universities = relationship("University", secondary=user_university, backref="users") 

    def add_university(self, university): 
     universities = self.universities 
     universities.append(university) 
     self.universities = universities 

    def add_course(self, course): 
     courses = self.courses 
     courses.append(course) 
     self.courses = courses 

2) 대학

class University(Base): 
    __tablename__ = 'universities' 
    id = Column(Integer, primary_key=True) 
    date = Column(DateTime) 
    name = Column(String(45)) 

3) 코스

class Course(Event): 
    __tablename__ = 'courses' 
    id = Column(Integer, ForeignKey('events.id'), primary_key=True) 
    name = Column(String(45)) 
    year = Column(Integer) 

    __mapper_args__ = { 
     'polymorphic_identity':'course', 
    } 

    events = relationship("Event", secondary=course_event, backref="courses") 

그래서 많은과 사용자 - 과정 및 사용자 - 대학 그리고 코스 - 이벤트 (물론 부모)와 함께하는 많은 것에서 많은 것.

역 추적 (마지막으로 가장 최근 통화) :

File "/Users/arnoutaertgeerts/Documents/Eclips/SlideTalk 2.0/test_SQL.py", line 473, in <module> 
    arnout.add_course(Analyse) 
    File "/Users/arnoutaertgeerts/Documents/Eclips/SlideTalk 2.0/test_SQL.py", line 101, in add_course 
    courses.append(course) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/SQLAlchemy-0.7.9-py2.7.egg/sqlalchemy/orm/collections.py", line 1046, in append 
    item = __set(self, item, _sa_initiator) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/SQLAlchemy-0.7.9-py2.7.egg/sqlalchemy/orm/collections.py", line 1021, in __set 
    item = getattr(executor, 'fire_append_event')(item, _sa_initiator) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/SQLAlchemy-0.7.9-py2.7.egg/sqlalchemy/orm/collections.py", line 714, in fire_append_event 
    item, initiator) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/SQLAlchemy-0.7.9-py2.7.egg/sqlalchemy/orm/attributes.py", line 800, in fire_append_event 
    value = fn(state, value, initiator or self) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/SQLAlchemy-0.7.9-py2.7.egg/sqlalchemy/orm/attributes.py", line 1026, in emit_backref_from_collection_append_event 
    passive=PASSIVE_NO_FETCH) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/SQLAlchemy-0.7.9-py2.7.egg/sqlalchemy/orm/attributes.py", line 854, in append 
    collection.append_with_event(value, initiator) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/SQLAlchemy-0.7.9-py2.7.egg/sqlalchemy/orm/collections.py", line 655, in append_with_event 
    getattr(self._data(), '_sa_appender')(item, _sa_initiator=initiator) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/SQLAlchemy-0.7.9-py2.7.egg/sqlalchemy/orm/collections.py", line 1046, in append 
    item = __set(self, item, _sa_initiator) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/SQLAlchemy-0.7.9-py2.7.egg/sqlalchemy/orm/collections.py", line 1021, in __set 
    item = getattr(executor, 'fire_append_event')(item, _sa_initiator) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/SQLAlchemy-0.7.9-py2.7.egg/sqlalchemy/orm/collections.py", line 714, in fire_append_event 
    item, initiator) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/SQLAlchemy-0.7.9-py2.7.egg/sqlalchemy/orm/attributes.py", line 800, in fire_append_event 
    value = fn(state, value, initiator or self) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/SQLAlchemy-0.7.9-py2.7.egg/sqlalchemy/orm/attributes.py", line 1020, in emit_backref_from_collection_append_event 
    _acceptable_key_err(state, initiator) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/SQLAlchemy-0.7.9-py2.7.egg/sqlalchemy/orm/attributes.py", line 982, in _acceptable_key_err 
    manager_of_class(initiator.class_)[initiator.key])) 

나는 그것이 작동하는 사용자 정의 내 방법으로 대학을 추가하려고하지만 난 과정을 추가하려고 할 때이 오류가

ValueError : User.courses 유형의 속성과 연결된 객체가 없습니다.

그러나 이벤트에서 상속하는 것을 중단하면 작동합니다!

아이디어가 있으십니까?

+0

사이드 비고 : 관계에 객체를 추가하기 위해'self.universities = universities' 또는'self.courses = courses'를 호출 할 필요가 없습니다 - 각각의 처음 두 라인 방법으로 충분하다. – van

+0

이벤트 매핑 된 코드의 코드를 게시하십시오 – vvladymyrov

+0

문제가 해결되었습니다! http://www.sqlalchemy.org/trac/ticket/2674 도움을 주셔서 감사합니다. – arnoutaertgeerts

답변