flask-admin:如何在编辑和创建表单中显示有意义的外键信息?

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但没有成功.任何帮助将非常感激!

sta*_*mer 8

实现__repr__数据模型的定义.

class DoctorType(db.Model):
    #...
    def __repr__(self):
        return self. doctor_type_english_name
Run Code Online (Sandbox Code Playgroud)


Mat*_*ell 5

事实证明,我缺少的是从 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 字段消失了。这是我想要的行为。