Mat*_*ell 2 python sqlalchemy flask flask-sqlalchemy flask-admin
我有一个使用SQLAlechemy的烧瓶应用程序的Flask-Admin界面,我似乎无法弄清楚如何处理外键.具体来说,我有以下两种模式:
class DoctorType(db.Model):
__tablename__ = 'doctor_type'
id = db.Column(db.Integer, primary_key=True)
doctor_type_english_name = db.Column(db.Unicode(255))
doctors = db.relationship('Doctor')
def __unicode__(self):
return self.doctor_type_english_name
class Doctor(db.Model):
__tablename__ = 'doctor'
id = db.Column(db.Integer, primary_key=True)
doctor_english_name = db.Column(db.Unicode(255))
doctor_type_id = db.Column(db.Integer, db.ForeignKey('doctor_type.id'))
def __unicode__(self):
return self.doctor_english_name
Run Code Online (Sandbox Code Playgroud)
我想创建或编辑flask-admin形式的doctor_type_id字段是doctor_type_english_name的下拉列表,而不是像这样的整数输入:
我__unicode__在模型上有函数(我使用的是python 2.7).我尝试在自定义表单视图中修改form_ajax_refs但没有成功.任何帮助将非常感激!
实现__repr__数据模型的定义.
class DoctorType(db.Model):
#...
def __repr__(self):
return self. doctor_type_english_name
Run Code Online (Sandbox Code Playgroud)
事实证明,我缺少的是从 Doctor 类到 DoctorType 类的关系。我在 DoctorType.doctors 关系中使用 backref 实现了这一点:
class DoctorType(db.Model):
__tablename__ = 'doctor_type'
id = db.Column(db.Integer, primary_key=True)
doctor_type_english_name = db.Column(db.Unicode(255))
doctors = db.relationship('Doctor', backref='doctor_type')
def __unicode__(self):
return self.doctor_type_english_name
Run Code Online (Sandbox Code Playgroud)
添加后,flask-admin 中的“Doctor”编辑和创建表单有一个名为 Doctor Type 的新字段,它是 DoctorType.doctor_type_english_name 值的下拉列表,默认情况下,Doctor Type ID 字段消失了。这是我想要的行为。