Python 添加相关记录时烧瓶管理员崩溃
我已经把这个问题从我的DB的大规模部署归结为我能做的最精简的版本,但我仍然得到这个错误 下面是使用Flask_SQLAlchemy的非常简单的数据库结构的代码Python 添加相关记录时烧瓶管理员崩溃,python,flask,flask-sqlalchemy,flask-wtforms,flask-admin,Python,Flask,Flask Sqlalchemy,Flask Wtforms,Flask Admin,我已经把这个问题从我的DB的大规模部署归结为我能做的最精简的版本,但我仍然得到这个错误 下面是使用Flask_SQLAlchemy的非常简单的数据库结构的代码 from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_admin import Admin from flask_admin.contrib.sqla import ModelView import os app = Flask(__name
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_admin import Admin
from flask_admin.contrib.sqla import ModelView
import os
app = Flask(__name__)
basedir = os.path.abspath(os.path.dirname(__file__))
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////' + os.path.join(basedir, 'app.db')
app.config['SECRET_KEY'] = 'mysec'
db = SQLAlchemy(app)
class Client(db.Model):
id = db.Column(db.Integer, primary_key=True)
clientname = db.Column(db.String(50))
sessions = db.relationship('Session', backref='client', lazy='dynamic')
def __repr__(self):
return '<Client %r>' % (self.clientname)
class Session(db.Model):
id = db.Column(db.Integer, primary_key=True)
sessionname = db.Column(db.String(50))
accept = db.Column(db.String(50))
client_id = db.Column(db.Integer, db.ForeignKey('client.id'))
def __repr__(self):
return '<Session %r>' % (self.sessionname)
admin = Admin(app)
admin.add_view(ModelView(Client, db.session))
admin.add_view(ModelView(Session, db.session))
if __name__ == '__main__':
app.run(debug=True)
多亏了@Doobeh,我的问题得以解决,只需在我的requirements.txt中添加'sqlalchemy==1.2.0b3'并安装它。SQLAlchemy的较新版本似乎不适用于Flask Admin的某些关系类型
这个问题现在应该已经解决了。根据Flask的说法,如果您直接从主分支提取sqlalchemy,那么Flask管理员应该可以与较新版本的sqlalchemy配合使用。将sqlalchemy==1.2.0b3添加到requirements.txt将解决此问题-此问题是由sqlalchemy更新引起的,导致Flask管理员的代码现在没有预料到的更改。安装稍旧一点的SQLAlchemy版本将使您一直运行,直到所有人都赶上为止。@Doobeh我认为这应该作为一个答案添加进来。这个问题现在肯定很普遍了。@Doobeh谢谢你,这样就解决了这个问题。我会补充一句作为答案。这似乎是一个比一些人想象的更常见的问题。Flask-Admin 1.5.1版最近发布。这个错误被修复了。看来这个答案现在应该升级了。
[2018-01-16 16:30:17,394] ERROR in app: Exception on /admin/session/new/ [GET]
Traceback (most recent call last):
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/flask/app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/flask/app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/flask/app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/flask/app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/flask_admin/base.py", line 69, in inner
return self._run_view(f, *args, **kwargs)
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/flask_admin/base.py", line 368, in _run_view
return fn(self, *args, **kwargs)
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/flask_admin/model/base.py", line 2024, in create_view
return_url=return_url)
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/flask_admin/base.py", line 308, in render
return render_template(template, **kwargs)
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/flask/templating.py", line 134, in render_template
context, ctx.app)
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/flask/templating.py", line 116, in _render
rv = template.render(context)
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/jinja2/environment.py", line 1008, in render
return self.environment.handle_exception(exc_info, True)
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/jinja2/environment.py", line 780, in handle_exception
reraise(exc_type, exc_value, tb)
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/flask_admin/templates/bootstrap2/admin/model/create.html", line 3, in top-level template code
{% from 'admin/lib.html' import extra with context %} {# backward compatible #}
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/flask_admin/templates/bootstrap2/admin/master.html", line 1, in top-level template code
{% extends admin_base_template %}
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/flask_admin/templates/bootstrap2/admin/base.html", line 35, in top-level template code
{% block page_body %}
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/flask_admin/templates/bootstrap2/admin/base.html", line 64, in block "page_body"
{% block body %}{% endblock %}
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/flask_admin/templates/bootstrap2/admin/model/create.html", line 22, in block "body"
{% block create_form %}
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/flask_admin/templates/bootstrap2/admin/model/create.html", line 23, in block "create_form"
{{ lib.render_form(form, return_url, extra(), form_opts) }}
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/jinja2/runtime.py", line 579, in _invoke
rv = self._func(*arguments)
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/flask_admin/templates/bootstrap2/admin/lib.html", line 212, in template
{% call form_tag(action=action) %}
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/jinja2/runtime.py", line 579, in _invoke
rv = self._func(*arguments)
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/flask_admin/templates/bootstrap2/admin/lib.html", line 191, in template
{{ caller() }}
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/jinja2/runtime.py", line 579, in _invoke
rv = self._func(*arguments)
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/flask_admin/templates/bootstrap2/admin/lib.html", line 213, in template
{{ render_form_fields(form, form_opts=form_opts) }}
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/jinja2/runtime.py", line 579, in _invoke
rv = self._func(*arguments)
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/flask_admin/templates/bootstrap2/admin/lib.html", line 183, in template
{{ render_field(form, f, kwargs) }}
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/jinja2/runtime.py", line 579, in _invoke
rv = self._func(*arguments)
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/flask_admin/templates/bootstrap2/admin/lib.html", line 137, in template
{{ field(**kwargs)|safe }}
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/wtforms/fields/core.py", line 153, in __call__
return self.meta.render_field(self, kwargs)
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/wtforms/meta.py", line 56, in render_field
return field.widget(field, **render_kw)
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/flask_admin/form/widgets.py", line 28, in __call__
return super(Select2Widget, self).__call__(field, **kwargs)
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/wtforms/widgets/core.py", line 287, in __call__
for val, label, selected in field.iter_choices():
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/site-packages/flask_admin/contrib/sqla/fields.py", line 109, in iter_choices
for pk, obj in self._get_object_list():
File "/home/maingame/come_flask_obt/env/local/lib/python2.7/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 "/home/maingame/come_flask_obt/env/local/lib/python2.7/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