为什么flask-admin要求mongoengine的ListField必须有字段类型?
我正在尝试使用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' } ]
这样做虽然保留了灵活性,但结构性就变差了,验证也会变得不太好。