2016-06-28 8 views
0

UsersAppointments에 대한 모델을 만들기 위해 Flask와 Peewee를 사용하고 있는데, 각각은 ForeignKeyField을 참조합니다. 문제는 내가 위에 하나를 정의하면 플라스크가 나에게 x is not defined을 줄 것이다. 예를 들어모델이 정의되지 않았습니다.

:

class User(Model): 
    appointments = ForeignKeyField(Appointment, related_name='appointments') 

class Appointment(Model): 
    with_doctor = ForeignKeyField(User, related_name='doctor') 

'User' is not defined을 반환합니다. 이 문제를 어떻게 해결할 수 있습니까?

답변

0

당신은 내가 아는 한 문자열로 정의 할 수 있습니다 선언이 창조되기 전에입니다

class User(Model): 
    appointments = ForeignKeyField("Appointment", related_name='appointments') 

class Appointment(Model): 
    with_doctor = ForeignKeyField(User, related_name='doctor') 

경우, 당신은 문자열로 쓸 수있는 옵션이 있습니다.

확실치 않습니다. 바인딩이 런타임에 있다고 생각합니다.

+0

이렇게하면 TypeError : issubclass() arg 1이 클래스 여야합니다. – josh

0

것은 & 주소 같은 일부 변경, 이름에 대한 예를보십시오 :

class Person(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    addresses = db.relationship('Address', backref='person', lazy='dynamic') 

class Address(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    person_id = db.Column(db.Integer, db.ForeignKey('person.id')) 
까지 내가,이 같은 관계를 db.ForeignKey()를 사용해야합니다 알고

... ForeignKeyField()이 장고에 정의를

+0

이것은 Peewee가 아닌 SQLAlchemy처럼 보입니다. – dirn

1

일반적으로 관계의 양면에 외래 키를 정의하지 않습니다. 특히 관계가 일대일이 아닌 경우에는 특히 그렇습니다.

related_name도 관련 모델에서 의미가있는 것으로 설정해야합니다. user.appointmentsUserAppointment에 액세스하기위한 더 좋은 이름입니다 (user.doctor).

class User(Model): 
    pass 

class Appointment(Model): 
    with_doctor = ForeignKeyField(User, related_name='appointments')