如何从 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']
我在我的管理站点中使用 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']