Python 如何使用MongoEngine为Flask Admin ModelView中的模型指定label_attr?

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

我想我有一个非常常见的用例,并且对它给我带来的麻烦感到惊讶

我想在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, 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框架)