Python 如何使用MongoEngine为Flask Admin ModelView中的模型指定label_attr?
我想我有一个非常常见的用例,并且对它给我带来的麻烦感到惊讶 我想在Flask Admin edit表单中为ReferenceField使用键值对,该表单由以下两个类生成:Python 如何使用MongoEngine为Flask Admin ModelView中的模型指定label_attr?,python,mongoengine,flask-admin,Python,Mongoengine,Flask Admin,我想我有一个非常常见的用例,并且对它给我带来的麻烦感到惊讶 我想在Flask Admin edit表单中为ReferenceField使用键值对,该表单由以下两个类生成: class Communique(db.Document): users = db.ListField(db.ReferenceField(User), default=[]) class User(db.Document): email = db.StringField(max_length=255, re
class Communique(db.Document):
users = db.ListField(db.ReferenceField(User), default=[])
class User(db.Document):
email = db.StringField(max_length=255, required=True)
def __unicode__(self):
return '%s' % self.id
我希望select由模型中的ObjectId和A电子邮件字段构造而成
通过映射_unicode__
属性到id字段,我可以在mongoengine端获得一些不错的东西,比如在查询中使用整个对象:
UserInformation.objects(user=current_user)
这会导致Flask Admin表单在编辑表单中显示mongo ObjectId,如下所示:
文档说我必须向Flask Admin创建的ModelSelectMultipleField提供标签\u attr。为此,我在ModelView上重写了get_form方法:
def get_form(self):
form = super(ModelView, self).get_form()
form.users = ModelSelectMultipleField(model=User,
label_attr='email',
widget=form.users.__dict__['kwargs']['widget'])
return form
我正在重用原始form.users使用的小部件(这可能是错误的)。它在编辑现有项时工作正常,但在创建新项时抛出异常(可能是因为我正在重用小部件)
所有这些似乎都比简单地为我的SelectField提供一个标签属性需要做更多的工作。修复列表视图只需将一个条目添加到column_formatters字典中。在创建我的ModelView类时,是否没有简单的方法来指定标签\u attr
我知道我可以通过返回_unicode___)属性中的email属性来解决这个问题,但我觉得我不应该这样做!我错过什么了吗 唉,现在我知道怎么做了,虽然从文件上看不太明显。form_args是一个字典,其中的项被键入表单模型。我所需要做的就是
form_args = dict(users=dict(label_attr='email'))
这似乎是一个正确的工作量(考虑到Flask Admin不是某种java框架)