如何使用 MongoEngine 在 Flask-Admin ModelView 中为模型指定 label_attr?
How to specify label_attr for a model in a Flask-Admin ModelView using MongoEngine?
我想我有一个很常见的用例,我很惊讶它给我带来了多少麻烦。
我想在由以下两个 classes 生成的 Flask-Admin 编辑表单中为 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 和电子邮件字段构成。
通过映射 __unicode__
属性到 id 字段我在 mongo 引擎方面得到了很好的东西,比如在查询中使用整个对象:
UserInformation.objects(user=current_user)
这具有导致 Flask-Admin 表单在编辑表单中显示 mongo ObjectId 的不幸影响,如下所示:
文档说我必须向 Flask-Admin 创建的 ModelSelectMultipleField 提供 label_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 提供 label_attr 所需的工作要多得多。修复列表视图是向 column_formatters 字典添加条目的简单问题。在创建我的 ModelView class 时没有简单的方法来指定 label_attr 吗?
我知道我可以通过在 __unicode__ 属性中返回电子邮件 属性 来解决这个问题,但我觉得我不应该那样做!我错过了什么吗?
Oy,现在我明白了如何去做,尽管从文档中看并不是那么明显。 form_args 是一个字典,其中的项目键控到表单模型。我需要做的就是...
form_args = dict(users=dict(label_attr='email'))
这似乎是正确的努力(考虑到 Flask-Admin 不是某种 java 框架)。
我想我有一个很常见的用例,我很惊讶它给我带来了多少麻烦。
我想在由以下两个 classes 生成的 Flask-Admin 编辑表单中为 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 和电子邮件字段构成。
通过映射 __unicode__ 属性到 id 字段我在 mongo 引擎方面得到了很好的东西,比如在查询中使用整个对象:
UserInformation.objects(user=current_user)
这具有导致 Flask-Admin 表单在编辑表单中显示 mongo ObjectId 的不幸影响,如下所示:
文档说我必须向 Flask-Admin 创建的 ModelSelectMultipleField 提供 label_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 提供 label_attr 所需的工作要多得多。修复列表视图是向 column_formatters 字典添加条目的简单问题。在创建我的 ModelView class 时没有简单的方法来指定 label_attr 吗?
我知道我可以通过在 __unicode__ 属性中返回电子邮件 属性 来解决这个问题,但我觉得我不应该那样做!我错过了什么吗?
Oy,现在我明白了如何去做,尽管从文档中看并不是那么明显。 form_args 是一个字典,其中的项目键控到表单模型。我需要做的就是...
form_args = dict(users=dict(label_attr='email'))
这似乎是正确的努力(考虑到 Flask-Admin 不是某种 java 框架)。