2014-09-13 5 views
1

를 사용하여 : 파이썬 3.4, 플라스크-관리자 1.0.8, SQLAlchemy의 0.9.7, 최신 안정 mariadb/MySQL의 백엔드외래 키 관계를 사용하여 SQLAlchemy의의 오토

그래, 난 그것이 "실험"의 실현하지만, sqlalchemy의 automap 기능을 사용하여 기존 스키마를 반영하려고합니다. 관리자 양식의 관련 레코드 값 (< sqlalchemy.ext.automap ... > 개체로 표시)을 제외하고는 올바르게 작동하는 것으로 보입니다. I 은 각 모델 클래스에서 __unicode__에 대한 def가 문제를 해결하지만 automap을 사용할 때이를 지정하는 방법이 확실하지 않다고 믿습니다. 여기

내가 관리 인터페이스를 통해

CREATE TABLE `hardware_owner` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `hardware_id` int(11) unsigned NOT NULL, 
    `user_id` int(11) unsigned DEFAULT NULL, 
    `description` varchar(255) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `hardware_owner_fk_1` (`hardware_id`), 
    KEY `hardware_owner_fk_2` (`user_id`), 
    CONSTRAINT `hardware_owner_fk_1` FOREIGN KEY (`hardware_id`) REFERENCES `hardware` (`id`) ON DELETE CASCADE, 
    CONSTRAINT `hardware_owner_fk_2` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE SET NULL 
) ENGINE=InnoDB 

을 편집하기 위해 노력하고있어 테이블이고 여기에 내가 옵션의 적절한 수를 볼 hardware_owner에 대한 뷰를 생성 관리자에서 관리자보기

from someapp import app, db 

from sqlalchemy.ext.automap import automap_base 
from flask.ext.admin.contrib.sqla import ModelView 
from flask.ext.admin import Admin 

Base = automap_base(metadata=db.metadata) 
Base.prepare() 

admin = Admin(app, name='SomeApp Admin') 
admin.add_view(ModelView(Base.classes.user, db.session)) 
admin.add_view(ModelView(Base.classes.hardware, db.session)) 
admin.add_view(ModelView(Base.classes.hardware_owner, db.session)) 

입니다 사용자 및 하드웨어의 드롭 다운에서 오른쪽의 관련 행을 가져 오는 것으로 알고 있습니다. 각 행에 대해 < sqlalchemy.ext.automap. (table_name) 객체 ... >보다 친숙한 레이블을 지정하는 방법을 알아 내면됩니다.

제안 사항?

업데이트 @joes에서 답변에 따라

오토 그래서 여기에 내가 오토에 의해 정의 된 클래스 각각에 __str__ 데프를 추가하는 해낸 있다는 않기 때문에 나는 어떤 모델을 정의하고 있지 않다 :

def obj_name_user(obj): 
    return obj.username 

def obj_name_hardware(obj): 
    return obj.name 

def obj_name_hardware_owner(obj): 
    return '%s - %s' % (obj.user.username, obj.hardware.name) 

Base = automap_base(metadata=db.metadata) 
Base.prepare() 

Base.classes.user.__str__ = obj_name_user 
Base.classes.hardware.__str__ = obj_name_hardware 
Base.classes.hardware_owner.__str__ = obj_name_hardware_owner 

이 방법은 저의 원래 문제를 해결하지만보다 나은 방법이 있습니까?

답변

0

파이썬 2를 사용중인 경우 모델에 __unicode__을 추가하십시오.

파이썬 3을 사용하는 경우 - __str__을 추가하십시오.

+0

아, 예, \ __ str__은 파이썬 3에서 유니 코드가 아닌 감사합니다 !! 그러나 automap이 모델 클래스를 생성 한 이후로 어떤 모델 클래스도 정의하지 않았습니다. 위의 내 업데이트를 참조하여 \ __ str__ def를 추가하는 방법을 확인하십시오. – jspin