如何使用Flask-Admin更新HSTORE
字段?我們如何使用Flask-Admin更新HSTORE字段?
常規ModelView
在編輯視圖中不顯示HSTORE
字段。它什麼都沒顯示。根本沒有控制權。在列表視圖中,它顯示一個包含JSON表示法的數據的列。這對我來說沒問題。
使用自定義ModelView
,我可以將HSTORE
字段更改爲TextAreaField。這將在編輯視圖中顯示JSON符號中的HSTORE字段。但我無法編輯/更新它。在列表視圖中,它仍以JSON表示法顯示對象。對我來說看起來很好。
class MyView(ModelView):
form_overrides = dict(attributes=fields.TextAreaField)
當我嘗試保存/編輯JSON,我收到此錯誤:
sqlalchemy.exc.InternalError
InternalError: (InternalError) Unexpected end of string
LINE 1: UPDATE mytable SET attributes='{}' WHERE mytable.id = ...
^
'UPDATE mytable SET attributes=%(attributes)s WHERE mytable.id = %(mytable_id)s' {'attributes': u'{}', 'mytable_id': 14L}
現在 - 使用代碼,我可以得到的東西保存到HSTORE領域:
class MyView(ModelView):
form_overrides = dict(attributes=fields.TextAreaField)
def on_model_change(self, form, model, is_created):
model.attributes = {"a": "1"}
return
這基本上覆蓋了模型並將其放入其中。然後我可以在列表視圖和編輯視圖中看到該對象。仍然不夠好 - 我想保存/編輯用戶輸入的對象。
我試圖解析並將表單中的內容保存到JSON中並退出。這不起作用:
class MyView(ModelView):
form_overrides = dict(attributes=fields.TextAreaField)
def on_model_change(self, form, model, is_created):
x = form.data['attributes']
y = json.loads(x)
model.attributes = y
return
json.loads(X)這樣說:
3210,這裏是失敗的一些採樣輸入:
{u's': u'ff'}
{'s':'ff'}
然而,這個輸入作品:
{}
空白也可以工作
這是我的SQL表:
CREATE TABLE mytable (
id BIGSERIAL UNIQUE PRIMARY KEY,
attributes hstore
);
這是我的SQA型號:
class MyTable(Base):
__tablename__ = u'mytable'
id = Column(BigInteger, primary_key=True)
attributes = Column(HSTORE)
這裏是我加的觀點對管理對象
admin.add_view(ModelView(models.MyTable, db.session))
添加查看使用自定義模型視圖
admin.add_view(MyView(models.MyTable, db.session))
但我不這樣做,同時這些觀點 - 我得到一個藍圖名稱衝突的錯誤 - 單獨的問題)
我也嘗試使用表單域轉換器。我無法實際打到代碼。
class MyModelConverter(AdminModelConverter):
def post_process(self, form_class, info):
raise Exception('here I am') #but it never hits this
return form_class
class MyView(ModelView):
form_overrides = dict(attributes=fields.TextAreaField)
自定義字段部分,有一個在文檔稍微簡單的例子:HTTPS:/ /wtforms.readthedocs.org/en/latest/fields.html#custom-fields –
這對hstore有幫助嗎? –