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

时间:2017-05-29 22:44:23

标签: python flask sqlalchemy 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

我希望创建或编辑flask-admin表单中的doctor_type_id字段是doctor_type_english_name的下拉列表,而不仅仅是这样的整数输入:

Doctor Type Input Field

我在模型上有__unicode__个函数(我使用python 2.7)。我尝试在自定义表单视图中修改form_ajax_refs但没有成功。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:7)

在数据模型的定义中实施__repr__

class DoctorType(db.Model):
    #...
    def __repr__(self):
        return self. doctor_type_english_name

答案 1 :(得分:0)

事实证明我缺少的是从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

一旦我补充说,"医生"在flask-admin中编辑和创建表单有一个名为Doctor Type的新字段,它是DoctorType.doctor_type_english_name值的下拉列表,默认情况下医生类型ID字段已消失。这是我想要的行为。