我的Flask-AppBuilder项目只显示相关表的ID,而不是它的名称,为什么?

时间:2017-11-15 11:49:04

标签: flask-appbuilder

我将使用F.A.B作为快速自定义IoT APP Web作为后端。

通过运行F.A.B教程和文档的示例项目http://127.0.0.1:5000/contactmodelview/list/ ContactView列表页面,联系人组显示为名称,黑色而不是id。

enter image description here

我克隆了设计,有一个1:N关系(一个帐户有很多设备,和ContactGroup有很多联系人一样),这里是代码:

models.py

class Account(Model):
    id = Column(Integer, primary_key = True)
    username = Column(String(128), unique = True)
    password = Column(String(128))
    email = Column(String(128))
    oauth = Column(String(128))
    cellphone = Column(String(32))

    def __repr__(self):
        return self.username

class Device(Model):
    id = Column(Integer, primary_key = True)
    snr = Column(String(256), unique = True)
    name = Column(String(128))
    addr = Column(String(256))
    latitude = Column(Float)
    longitude = Column(Float)
    status = Column(Integer)
    api_id = Column(String(512))
    api_key = Column(String(256))
    api_dev_id = Column(String(256), unique = True)
    api_dev_key = Column(String(256))
    owner_id = Column(Integer, ForeignKey('account.id'))    
    owner = relationship("Account")

    def __repr__(self):
        return self.name

views.py

class DeviceView(ModelView):        
    datamodel = SQLAInterface(Device)
    related_views = [ApplicationView, EventView]

    label_columns = {'snr':'SNR', 'api_dev_id':'Device ID', 'owner_id':'Owner'}
    list_columns = ['snr','name','addr','owner_id']

    show_fieldsets = [
    ('Summary',
        {'fields':['snr','name','owner_id']}
    ),
    ('Device Info',
            {'fields':'addr','latitude','longitude','status','api_id','api_key','api_dev_id','api_dev_key'],'expanded':True}
    ),
    ]


class AccountView(ModelView):
    datamodel = SQLAInterface(Account)
    related_views = [DeviceView]

但是,DeviceView列表以蓝色显示相关ID,并且不显示帐户名称。但是,在DeviceDetail视图中,将显示“帐户名”。

enter image description here

差异是什么?

1 个答案:

答案 0 :(得分:0)

我找到了原因,并将我的观看代码更改为:

class DeviceView(ModelView):        
    datamodel = SQLAInterface(Device)
    related_views = [ApplicationView, EventView]

    label_columns = {'snr':'SNR', 'api_dev_id':'Device ID', 'owner_id':'Owner'}
    list_columns = ['name','snr','addr','owner']

    show_fieldsets = [
    ('Summary',
        {'fields':['snr','name','owner']}
    ),
    ('Device Info',
        {'fields':['addr','latitude','longitude','status','api_id','api_key','api_dev_id','api_dev_key'],'expanded':True}
    ),
    ]

主要区别是将字段'owner_id'替换为'owner'。