如何从 ModelView class flask_admin 向数据库添加数据?

How add data on database from ModelView class flask_admin?

我在我的管理站点中使用 Flask_Admin 进行申请。然后我输入地址。之后,这个地址请求 Google 地图并获取坐标:lat,lng。我应该将这个坐标保存在数据库中吗? 这是我在 Flask_Admin view

上的代码
class EventAdmin(sqla.ModelView):
column_display_pk = True
la = ''
lo = ''
form_columns = ['title', 'description', 'date', 'cover', 'city', 'category', 'address']
form_extra_fields = {
    'cover': form.ImageUploadField('Cover',
                                   namegen=prefix_name,
                                   base_path=get_path('events'),
                                   thumbnail_size=(250, 250, True),
                                   allowed_extensions=app.config['ALLOWED_EXTENSIONS'])
}

column_exclude_list = ('longi', 'lati')
def on_model_change(self, form, model, is_created):
    address = unicode(model)
    url = "https://maps.googleapis.com/maps/api/geocode/json?address=" + address.encode('utf-8')
    response = urllib2.urlopen(url)
    jsongeocode = response.read().encode('utf-8')
    data = eval(jsongeocode)
    coordinates = data['results'][0]['geometry']['location']
    self.la = coordinates['lat']
    self.lo = coordinates['lng']

'la' 和 'lo' 属性未绑定到模型 class,因此它们不会持久保存到数据库中。相反,您应该将从 google api 获得的响应(经度和纬度)绑定到您的模型 class 属性(您将其命名为 'longi' 和 'lati'. 所以基本上你用

对用户隐藏它们
column_exclude_list = ('longi', 'lati')

因为您不希望用户输入该数据(您正在为他输入)。 当用户提交表单时,您的 on_model_change 方法获取用户提交的模型实例(具有标题、描述、日期等值)。现在它只需要添加 longi 和 lati 值。
相反,你应该有这个

def on_model_change(self, form, model, is_created):
    address = unicode(model)
    url = "https://maps.googleapis.com/maps/api/geocode/json?address=" + address.encode('utf-8')
    response = urllib2.urlopen(url)
    jsongeocode = response.read().encode('utf-8')
    data = eval(jsongeocode)
    coordinates = data['results'][0]['geometry']['location']
    model.lati = coordinates['lat']
    model.longi = coordinates['lng']