【问题标题】:Flask_admin Value from nested JSON object in column_list来自 column_list 中嵌套 JSON 对象的 Flask_admin 值
【发布时间】:2018-05-26 05:29:43
【问题描述】:

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

以下情况:

我的 MongoDB 中有以下 json sn-p:

[{
"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。

【问题讨论】:

标签: python flask flask-admin


【解决方案1】:

老问题,但就目前而言,似乎没有办法直接从 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']

就是这样!

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 2019-11-22
    • 1970-01-01
    相关资源
    最近更新 更多