在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python  網(wǎng)絡(luò)安全/ flask-admin部署到linux報(bào)錯(cuò) too many values to

flask-admin部署到linux報(bào)錯(cuò) too many values to unpack (expected 2)

我把我的項(xiàng)目上傳到linux環(huán)境后,解壓之后,配置數(shù)據(jù)庫(kù)及其app為
host=‘0.0.0.0’,port=5005
之后運(yùn)行起來了,可是點(diǎn)擊到自定義的model 就是各種報(bào)錯(cuò),報(bào)錯(cuò)內(nèi)容都是一樣的;可是在我的個(gè)人window環(huán)境卻完全沒有問題,這是環(huán)境哪里有問題嗎?

File "/root/app/esayblog/apps/templates/admin/lib.html", line 190, in template
    {{ render_field(form, f, kwargs) }}
  File "/root/.pyenv/versions/3.6.1/lib/python3.6/site-packages/jinja2/runtime.py", line 579, in _invoke
    rv = self._func(*arguments)
  File "/root/app/esayblog/apps/templates/admin/lib.html", line 121, in template
    {% if field(**kwargs) is not none %}{% set testlabel = field(**kwargs) %}
  File "/root/.pyenv/versions/3.6.1/lib/python3.6/site-packages/wtforms/fields/core.py", line 153, in __call__
    return self.meta.render_field(self, kwargs)
  File "/root/.pyenv/versions/3.6.1/lib/python3.6/site-packages/wtforms/meta.py", line 56, in render_field
    return field.widget(field, **render_kw)
  File "/root/.pyenv/versions/3.6.1/lib/python3.6/site-packages/flask_admin/form/widgets.py", line 28, in __call__
    return super(Select2Widget, self).__call__(field, **kwargs)
  File "/root/.pyenv/versions/3.6.1/lib/python3.6/site-packages/wtforms/widgets/core.py", line 287, in __call__
    for val, label, selected in field.iter_choices():
  File "/root/.pyenv/versions/3.6.1/lib/python3.6/site-packages/flask_admin/contrib/sqla/fields.py", line 168, in iter_choices
    for pk, obj in self._get_object_list():
  File "/root/.pyenv/versions/3.6.1/lib/python3.6/site-packages/flask_admin/contrib/sqla/fields.py", line 102, in _get_object_list
    self._object_list = [(text_type(get_pk(obj)), obj) for obj in query]
  File "/root/.pyenv/versions/3.6.1/lib/python3.6/site-packages/flask_admin/contrib/sqla/fields.py", line 102, in <listcomp>
    self._object_list = [(text_type(get_pk(obj)), obj) for obj in query]
  File "/root/.pyenv/versions/3.6.1/lib/python3.6/site-packages/flask_admin/contrib/sqla/fields.py", line 299, in get_pk_from_identity
    cls, key = identity_key(instance=obj)
ValueError: too many values to unpack (expected 2)
回答
編輯回答
薄荷糖

終于解決了!
原來的是同一個(gè)flask_sqlalchemy版本,但是linux版本和window版本的下的orm/mapper.py的一個(gè)方法返回的元組個(gè)數(shù)不一樣;window版返回兩個(gè)是正確的;linux版本返回三個(gè),存在bugger,估計(jì)現(xiàn)在是剛更新的和flask_admin還沒有同步:
window版的源碼:

  def identity_key_from_primary_key(self, primary_key):
        """Return an identity-map key for use in storing/retrieving an
        item from an identity map.

        :param primary_key: A list of values indicating the identifier.

        """
        return self._identity_class, tuple(primary_key)

linux版本的:

def identity_key_from_primary_key(self, primary_key, identity_token=None):
        """Return an identity-map key for use in storing/retrieving an
        item from an identity map.

        :param primary_key: A list of values indicating the identifier.

        """
        return self._identity_class, tuple(primary_key), identity_token

所以把源碼給改成一樣的就可以了;
或者把他的調(diào)用方法給改了:

flask_admin/contrib/sqla/fields.py 改成:
def get_pk_from_identity(obj):
    # TODO: Remove me
    print(obj.__dict__)
    print(obj.__dict__['id'])
    #cls, key = identity_key(instance=obj)
    key = identity_key(instance=obj)[1]
    return u':'.join(text_type(x) for x in key)
即可,終于發(fā)現(xiàn)python的好處就該源碼容易??!
2018年2月3日 14:14