【问题标题】:Change option label in WTForms-SQLAlchemy QuerySelectField更改 WTForms-SQLAlchemy QuerySelectField 中的选项标签
【发布时间】:2020-11-06 18:32:46
【问题描述】:

我制作了一个 Flask 应用程序,我的用户可以在其中添加一些“目标”并对其进行编辑。每个目标都有一个平台,每个平台都有一个类别。

例如:

  • “Facebook”平台属于“社交网络”类别。
  • “Instagram”平台属于“社交网络”类别。
  • 平台“Google”属于“搜索引擎”类别。

我有一个“新目标字段”表单,用户需要从下拉列表中选择一个平台。我设法用 QuerySelectFied 填充了这个列表:

platform = QuerySelectField('Platform', validators=[DataRequired()], query_factory=GetPlatforms, get_label='name')

GetPlatforms是一个加载列表的函数:

def GetPlatforms():
    return Platform.query.order_by('name')

此列表多次显示相同的平台名称。它们是不同的平台,因为这些平台具有不同的类别。所以一切都很好。

问题是用户无法区分平台,因为下拉列表中只有 1 个标签。请参阅下面的屏幕截图以更好地了解该问题:

如何更改每个选项的标签,使类别位于名称旁边?

【问题讨论】:

    标签: python flask sqlalchemy wtforms


    【解决方案1】:

    将模型对象的 __str____unicode__ 添加到您的模型并设置 no get_label='name'

    例如: 在您的数据库模型中:

    class Platform(db.Model):
        name = db.Column(db.String(64), primary_key=True)
        platform = db.Column(db.String(64))
    
        def __repr__(self):
            return '{} {}'.format(self.name, self.platform) 
    
    

    并以您的形式:

    platform = QuerySelectField('Platform', validators=[DataRequired()], query_factory=GetPlatforms)
    

    另见文档:

    get_label – 如果是字符串,则在模型类上使用此属性作为 与每个选项关联的标签。如果一个参数可调用,这 callable 将传递模型实例并期望返回 标签文本。否则,模型对象的 strunicode 将 使用。

    【讨论】:

      【解决方案2】:

      将您的查询更改为:

      Platform.query.distinct(Platform.name).order_by('name')
      

      【讨论】:

        猜你喜欢
        • 2013-08-21
        • 1970-01-01
        • 2014-03-02
        • 1970-01-01
        • 2016-08-19
        • 2019-10-26
        • 1970-01-01
        • 2018-06-29
        相关资源
        最近更新 更多