2016-06-28 71 views
0

我正在使用Flask和Peewee为UsersAppointments创建模型,并且它们中的每个模型都有一个引用对方的ForeignKeyField。问题是,如果我定义一个在另一个之上,Flask将给我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()在Django定义

+0

这看起来像SQLAlchemy,而不是Peewee。 – dirn

1

您通常不会在关系的两侧定义外键,特别是当关系不是一对一时。

您还应该将related_name设置为对相关模型有意义的内容。 user.appointments对于访问UserAppointment可能是比user.doctor更好的名称。

class User(Model): 
    pass 

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