gpt4 book ai didi

python - 如何使用 MongoEngine 在 Flask-Admin ModelView 中为模型指定 label_attr?

转载 作者:太空宇宙 更新时间:2023-11-03 17:51:13 25 4
gpt4 key购买 nike

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

我想在由以下两个类生成的 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

我希望根据模型中的 ObjectId 和电子邮件字段构建选择。

通过映射 __unicode__属性到 id 字段我在 mongoengine 方面得到了很好的东西,比如在查询中使用整个对象:

UserInformation.objects(user=current_user)

这会导致 Flask-Admin 表单在编辑表单中显示 mongo ObjectId,如下所示:

enter image description here

文档说我必须向 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 所需的工作量要多。修复 ListView 只需向 column_formatters 字典添加一个条目即可。创建 ModelView 类时是否没有简单的方法来指定 label_attr?

我知道我可以通过返回 __unicode__ 属性中的电子邮件属性来解决这个问题,但我觉得我不必这样做!我错过了什么吗?

最佳答案

哦,现在我明白了如何做到这一点,尽管从文档中看并不那么明显。 form_args 是一个字典,其中包含与表单模型相关的项目。我需要做的就是......

form_args = dict(users=dict(label_attr='email'))

这似乎确实是适当的努力(考虑到 Flask-Admin 不是某种 Java 框架)。

关于python - 如何使用 MongoEngine 在 Flask-Admin ModelView 中为模型指定 label_attr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29057016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com