【问题标题】:Why does flask-admin require a ListField of mongoengine to have a field type?为什么 flask-admin 需要 mongoengine 的 ListField 才能具有字段类型?
【发布时间】:2014-03-03 10:30:03
【问题描述】:

我正在尝试使用flask-admin,这看起来很棒而且很简单,但是我遇到了一个问题。

我在集合中有一个字段定义为ListField(),列表字段类型的隐式类型为None。我没有为该字段定义类型的原因是因为我保留了一个列表列表,并且没有其他优雅的方法(我发现)可以使用 mongoengine 完成此操作。

但是flask-admin不让我定义这样一个字段,报错ListField "movements" must have field specified for model

有没有办法解决这个问题?

【问题讨论】:

  • 您是否可以粘贴一些代码并向我们展示您在 mongoengine 上使用的版本?
  • db.ListField(field=db.ListField()) 怎么样

标签: python flask flask-admin


【解决方案1】:

flask admin 需要指定字段的原因是因为表单渲染不知道要为其显示哪种类型的输入。

例如,如果它是选择字段、日期字段或另一个列表字段本身!

你可以这样做:

my_field = db.ListField(field=db.ListField(field=db.StringField()))

最里面的字段可以是任何东西,包括 EmbeddedDocumentField 或 IntField 等。

另外,如果你想继续使用ListField而不指定字段类型,你也可以要求flask-admin通过覆盖ModelView将其视为一个字符串,然后它会给你一个文本框包含字符串:

[ 'a value', 42, { 'A':'B' } ]

所以这保留了灵活性,但减少了结构并使验证变得糟糕。

【讨论】:

  • 覆盖 ModelView ( ... form_overrides = {'movements': StringField} ... ) 是一个不错的解决方法
猜你喜欢
  • 2021-07-05
  • 2012-12-10
  • 2020-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 1970-01-01
  • 2016-12-12
相关资源
最近更新 更多