【问题标题】:Model is not defined模型未定义
【发布时间】:2016-10-30 08:55:51
【问题描述】:

我正在使用 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。我该如何解决这个问题?

【问题讨论】:

    标签: python flask peewee flask-peewee


    【解决方案1】:

    您通常不会在关系的双方都定义外键,尤其是当关系不是一对一的时候。

    您还应该将related_name 设置为对相关模型有意义的值。对于访问UserAppointments,user.appointments 可能比user.doctor 更好。

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

    【讨论】:

      【解决方案2】:

      据我所知,您可以将其定义为字符串:

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

      如果声明在创建之前,您可以选择将其写为字符串。

      我不确定,我认为绑定是在运行时。

      【讨论】:

      • 如果我这样做,我会得到TypeError: issubclass() arg 1 must be a class
      【解决方案3】:

      尝试像这样进行一些更改,例如名称和地址:

      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 中定义

      【讨论】:

      • 这看起来像 SQLAlchemy,而不是 Peewee。
      猜你喜欢
      • 2019-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-23
      • 2013-10-20
      • 1970-01-01
      相关资源
      最近更新 更多