2013-04-08 1 views
1

나는 카멜롯카멜롯 단일 테이블 상속

class Person(Entity): 
    __tablename__ = 'people' 
    id = Column(sqlalchemy.Integer, primary_key=True) 
    discriminator = Column('type', sqlalchemy.String(50)) 
    __mapper_args__ = {'polymorphic_on': discriminator} 

    class Admin(EntityAdmin): 
     verbose_name = 'Person' 
     list_display = ['id','discriminator'] 

class Engineer(Person): 
    __mapper_args__ = {'polymorphic_identity': 'engineer'} 
    primary_language = Column(sqlalchemy.String(50)) 

    class Admin(EntityAdmin): 
     verbose_name = 'HR' 
     list_display = ['id','discriminator'] 

에 포트에 SqlAlchem ​​y의 단일 테이블 상속 예를 시도하지만 다음과 같은 오류를 제공합니다 :

Traceback (most recent call last): 
    File "D:/Programming/test/main.py", line 41, in <module> 
     start_application() 
    File "D:/Programming/test/main.py", line 37, in start_application 
     from testing.application_admin import MyApplicationAdmin 
    File "D:\Programming\test\testing\application_admin.py", line 6, in <module> 
     from testing.model import Engineer, Person 
    File "D:\Programming\test\testing\model.py", line 17, in <module> 
     class Engineer(Person): 
    File "C:\Python27\lib\site-packages\camelot\core\orm.py", line 334, in __init__ 
     super(EntityMeta, cls).__init__(classname, bases, dict_) 
    File "C:\Python27\lib\site-packages\sqlalchemy\ext\declarative.py", line 1343, in __init__ 
     _as_declarative(cls, classname, cls.__dict__) 
    File "C:\Python27\lib\site-packages\sqlalchemy\ext\declarative.py", line 1336, in _as_declarative 
     **mapper_args) 
    File "C:\Python27\lib\site-packages\sqlalchemy\orm\__init__.py", line 1129, in mapper 
     return Mapper(class_, local_table, *args, **params) 
    File "C:\Python27\lib\site-packages\sqlalchemy\orm\mapper.py", line 197, in __init__ 
     self._configure_inheritance() 
    File "C:\Python27\lib\site-packages\sqlalchemy\orm\mapper.py", line 473, in _configure_inheritance 
     self.local_table) 
    File "C:\Python27\lib\site-packages\sqlalchemy\sql\util.py", line 303, in join_condition 
     "between '%s' and '%s'.%s" % (a.description, b.description, hint)) 
    sqlalchemy.exc.ArgumentError: Can't find any foreign key relationships between 'people' and 'engineer'. 

내가 카멜롯의 방법이 아니다 뭔가를하고 있습니까

? 모델 상속을 구현하는 가장 좋은 방법은 무엇입니까? 카멜롯의 설명서에서 아무 것도 찾을 수 없었습니다.

편집 : 나는 엔지니어 클래스에 다음을 추가하려고

__tablename__ = 'people' 
__table_args__ = {'extend_existing': True} 

하지만 지금은 개인 또는 엔지니어 테이블을 선택하려고 이후 나는 그들 중 내가 할 추가하려고하면 :

C:\Python27\lib\site-packages\sqlalchemy\sql\expression.py:2276: SAWarning: Column u'people_id' on table <sqlalchemy.sql.expression.Select at 0x343fb90; Select object> being replaced by another column with the same key. Consider use_labels for select() statements. 
self[column.key] = column 

팁이 있습니까? 당신의 엔지니어 클래스

답변

3

__tablename__는 그렇지 않으면 카멜롯 멀티 테이블 상속을 가정합니다 기본 TABLENAME을 할당하고, SQLAlchemy의 것 없음으로 설정해야하고, 따라서 외래 키 관계를 필요로한다.