Flask_admin来自column_list中嵌套JSON对象的值

时间:2018-05-26 05:29:44

标签: python flask flask-admin

我不确定以下是否是错误/未实施。

以下情况:

我的MongoDB中有以下json片段:

[{
"firstname": "Test",
"surname": "Test",
"email_address": "example@example.com",
"country": "Austria",
"holiday_home": {
    "address": "",
    "address_2": "",
    "city": "",
    "country": "Germany",
    "postal_code": "",
    "state_province": ""
}
}]

我设法在“标准视图”中显示“第一级值”(名字,姓氏,电子邮件,国家/地区),没有任何问题:

class RegistrantView(ModelView):
column_list = ('firstname', 'surname', 'email_address', 'country')
form = RegistrantForm

不幸的是,我无法访问嵌套在“holiday_home”中的密钥/值。

我尝试了很多方法,比如column_list = ([holiday_home]['country']),但遗憾的是没有成功。

因此,我想问一下,如果使用带有pymongo的flask-admin,这是否可行。

1 个答案:

答案 0 :(得分:0)

老问题,但就目前而言,似乎无法直接从 PyMongo ModelView 执行请求。这意味着,默认情况下没有特殊符号允许您从嵌套文档中获取值。

话虽如此,我只是在这里分享了关于这个非常具体问题的两个解决方案: https://github.com/flask-admin/flask-admin/issues/1585

首先,您可以在您的 flask_admin_custom.contrib.pymongo.views 中复制/覆盖 : _get_field_value 函数,以便它更好地处理点符号,如“holiday_home.country”。一个提议是:

def _get_field_value(self, model, name):
        """
            Get unformatted field value from the model
        """
        try:
            return reduce(dict.get, name.split('.'), model)
        except AttributeError:
            return model.get(name)

如果您认为与官方​​ Flask 管理代码完全不同,您仍然可以使用 Joost 指出的列格式化程序。 为此,只需在您的列列表中添加一个自定义名称:

column_list = ("firstname","surname", "email_address" "country")

然后在您的列格式化程序中捕获此确切名称:

column_formatter = {
  'country' : _country_formatter
}

不要忘记在代码中的某处定义格式化函数,例如:

def _country_formatter(view, context, model, name):
  return model['holyday_home']['country']

就是这样!

第二个解决方案听起来更像是一个黑客,但我认为这是目前大多数人的做法。