为什么flask-admin要求mongoengine的ListField必须有字段类型?

6 投票
1 回答
1073 浏览
提问于 2025-04-17 20:35

我正在尝试使用flask-admin,这个工具看起来很不错也很简单,但我遇到了一个问题。

我在一个集合里有一个字段,这个字段被定义为ListField(),而且这个列表字段的类型默认为None。我之所以不为这个字段定义类型,是因为我想保存一个列表的列表,而我找到的其他方法(用mongoengine)都不够优雅。

但是flask-admin不允许我这样定义这个字段,给我报了个错,提示ListField "movements" must have field specified for model

有没有什么办法可以解决这个问题呢?

1 个回答

1

Flask Admin 需要指定一个字段的原因是,如果不这样做,表单在显示的时候就不知道该用什么样的输入框。

比如说,这个字段可能是选择框、日期框,或者是其他类型的列表框!

你可以这样做:

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

最里面的字段可以是任何类型的,比如说嵌入文档字段(EmbeddedDocumentField)或者整数字段(IntField)等等。

另外,如果你想继续使用 ListField 而不指定字段类型,你也可以通过重写 ModelView 来让 flask-admin 把这个字段当作字符串来处理,这样它就会给你一个文本框,里面是字符串:

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

这样做虽然保留了灵活性,但结构性就变差了,验证也会变得不太好。

撰写回答