我正在构建一个Flask-Admin应用程序,它使用REST API作为其后端数据库,我已经将其实现为我自己的BaseModelView。我已经让它与自定义模型一起工作,并实现了编辑和保存模型的所有功能。
但是,我有一个字段User,它需要根据姓名/电子邮件搜索另一个REST API端点的用户ID,并且由于预计用户列表将变得非常大,因此我希望该字段是一个AJAX查找,就像我在通过Select2/Ajax查找外键的SQLAlchemy示例中看到的那样。
由于我需要自己的Ajax查找,从遵循文档到通读代码,我正在努力寻找如何自己实现它的工作示例,并且想知道是否有人可以指导我。
我曾尝试实现一个AjaxSelectField并使用BaseModelView的form_ajax_refs属性覆盖表单的用户字段(在scaffold_form方法中创建),但没有成功。
有没有人可以举例说明如何在我的模型表单上放置一个自定义的Select2 Ajax查找字段来查找来自REST API的数据,以便我可以在创建/编辑模型时搜索分配给模型的用户ID?
发布于 2020-11-28 00:09:23
最后,你必须在你的BaseModelView中添加两件事来完成这件事:
在BaseModelView类中-使用自定义模型表单将AjaxSelectField添加到表单中:
def scaffold_form(self):
class AccountForm(Form):
owner = AjaxSelectField(UserAjaxModelLoader('owner'),
label='Owner', blank_text="Select User...")
return AccountForm
然后添加一个对form_ajax_refs
字段的引用:
form_ajax_refs = {
'owner': UserAjaxModelLoader('owner')
}
最后是UserAjaxModelLoader
类的实现,它提供了AJAX端点并将其串在一起:
from flask_admin.model.ajax import AjaxModelLoader, DEFAULT_PAGE_SIZE
class UserAjaxModelLoader(AjaxModelLoader):
def __init__(self, name, **options):
super(UserAjaxModelLoader, self).__init__(name, options)
def format(self, model):
if model:
return (model.uid, model.email)
return None
def get_one(self, pk):
return auth.get_user(pk)
def get_list(self, query, offset=0, limit=DEFAULT_PAGE_SIZE):
# Put your code to search REST API for users here
return users
https://stackoverflow.com/questions/64997933
复制