Flask Admin / SQLAlchemy Unicode错误

bfcondon

我创建了一个带有SQLAlchemy后端的Flask应用程序,该应用程序非常简单。但是,在使用Flask Admin扩展程序时遇到了一个问题。尽管它对于大多数模型都适用,但其中一些给了我以下错误:

TypeError: 'unicode' object is not callable

这是问题模型之一的示例:

class Trade(db.Model):

    __tablename__ = 'trade'

    id = db.Column(db.Integer, primary_key=True)

    issuer_id = db.Column(db.Integer,
                          db.ForeignKey('issuer.id'), primary_key=True)

    obligation_id = db.Column(db.Integer,
                              db.ForeignKey('obligation.id'))

    obligation = db.relationship('Obligation', backref='trades')

    type = db.Column(db.String(50))
    purpose = db.Column(db.String(50))

    date = db.Column(db.Date)
    currency = db.Column(db.Text)
    amount = db.Column(db.Float)

    __mapper_args__ = {
        'polymorphic_on': purpose,
        'polymorphic_identity': 'trade',
        'with_polymorphic': '*'
    }

    def __str__(self):
        return self.obligation + ' ' + self.date.strftime('%y-%m-%d')

为了提供有关扩展如何调用它的上下文,我有一些代码为所有sqlalchemy模型创建管理页面。

from test_app import app
from flask.ext.admin import Admin
from test_app.db import db, get_model, models_list

from flask.ext.admin.contrib import sqla

admin = Admin(app, name='Test App')

for model in sorted(models_list()):

    admin_cls = type(model, (sqla.ModelView,), {'column_display_pk': False})
    admin_view = admin_cls(get_model(model), db.session)
    admin.add_view(admin_view)

最终结果是,当我导航到该模型的管理页面时,出现以下错误,该错误并没有为导致该问题的代码行提供太多上下文。

File "/home/user/app/venv/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "/home/user/app/venv/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/home/user/app/venv/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "/home/user/app/venv/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/home/user/app/venv/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/user/app/venv/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/home/user/app/venv/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "/home/user/app/venv/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/user/app/venv/lib/python2.7/site-packages/flask_admin/base.py", line 60, in inner
return f(self, *args, **kwargs)
File "/home/user/app/venv/lib/python2.7/site-packages/flask_admin/base.py", line 60, in inner
return f(self, *args, **kwargs)
File "/home/user/app/venv/lib/python2.7/site-packages/flask_admin/base.py", line 60, in inner
return f(self, *args, **kwargs)
File "/home/user/app/venv/lib/python2.7/site-packages/flask_admin/model/base.py", line 1182, in index_view
actions_confirmation=actions_confirmation)
File "/home/user/app/venv/lib/python2.7/site-packages/flask_admin/base.py", line 254, in render
return render_template(template, **kwargs)
File "/home/user/app/venv/lib/python2.7/site-packages/flask/templating.py", line 128, in render_template
context, ctx.app)
File "/home/user/app/venv/lib/python2.7/site-packages/flask/templating.py", line 110, in _render
rv = template.render(context)
File "/home/user/app/venv/lib/python2.7/site-packages/jinja2/environment.py", line 969, in render
return self.environment.handle_exception(exc_info, True)
File "/home/user/app/venv/lib/python2.7/site-packages/jinja2/environment.py", line 742, in handle_exception
reraise(exc_type, exc_value, tb)
File "/home/user/app/venv/lib/python2.7/site-packages/flask_admin/templates/admin/model/list.html", line 4, in top-level template code
{% import 'admin/actions.html' as actionlib with context %}
File "/home/user/app/venv/lib/python2.7/site-packages/flask_admin/templates/admin/master.html", line 1, in top-level template code
{% extends admin_base_template %}
File "/home/user/app/venv/lib/python2.7/site-packages/flask_admin/templates/admin/base.html", line 22, in top-level template code
{% block page_body %}
File "/home/user/app/venv/lib/python2.7/site-packages/flask_admin/templates/admin/base.html", line 50, in block "page_body"
{% block body %}{% endblock %}
File "/home/user/app/venv/lib/python2.7/site-packages/flask_admin/templates/admin/model/list.html", line 49, in block "body"
{% block model_list_table %}
File "/home/user/app/venv/lib/python2.7/site-packages/flask_admin/templates/admin/model/list.html", line 95, in block "model_list_table"
{% block list_row scoped %}
File "/home/user/app/venv/lib/python2.7/site-packages/flask_admin/templates/admin/model/list.html", line 118, in block "list_row"
<td>{{ get_value(row, c) }}</td>
TypeError: 'unicode' object is not callable

任何有关如何调试此建议将不胜感激。

非常感谢。

更新:

我发现了错误。它与@property装饰器有关。在模型定义中,我有两个属性。

@property
def issue(self):

    return str(self.description)

@property
def __str__(self):

    return self.issue

如果删除str上方的@property,则该错误消失。

https://gist.github.com/bfcondon/8760010

乔斯

之所以发生这种情况,是因为Flask-Admin需要__unicode__Python 2上的模型中的字符串。

尝试将您的模型更改__str____unicode__,应用程序将起作用。同时,我将更新示例以使其与Python 2更兼容。

在python 3上,__str__不应具有@property装饰器。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Flask Admin / SQLAlchemy Unicode错误

来自分类Dev

Flask SQLAlchemy分页错误

来自分类Dev

在Flask-Admin中创建目录时出现Unicode错误

来自分类Dev

Flask + SQLAlchemy邻接列表backref错误

来自分类Dev

如何将flask-sqlalchemy的db.Table添加到flask-admin?

来自分类Dev

Flask-Admin / Flask-SQLAlchemy:为INSERT设置user_id = current_user

来自分类Dev

无法安装flask_sqlalchemy->导入错误:没有名为flask_sqlalchemy的模块

来自分类Dev

使用 SQLAlchemy 在flask-admin 中更改顺序或禁用唯一验证器

来自分类Dev

flask sqlalchemy filter_by给出运行时错误

来自分类Dev

返回SQLAlchemy查询结果时的Python Flask类型错误

来自分类Dev

Flask SQLAlchemy:属性错误:“函数”对象没有“翻译”属性

来自分类Dev

Flask SQLAlchemy关系

来自分类Dev

Flask-SQLAlchemy TimeoutError

来自分类Dev

Flask/SQLAlchemy Insert Into Database

来自分类Dev

Flask + SqlAlchemy ALTER表

来自分类Dev

Flask SQLAlchemy关系

来自分类Dev

无法安装Flask SQLAlchemy

来自分类Dev

使用SQLAlchemy在Flask-Admin中对hybrid_property和表达式的排序顺序不正确

来自分类Dev

uWSGI,Flask,sqlalchemy和Postgres:SSL错误:解密失败或记录Mac错误

来自分类Dev

PyCharm解析-flask.ext.sqlalchemy与flask_sqlalchemy

来自分类Dev

SqlAlchemy Flask中的列参数

来自分类Dev

Flask-SQLAlchemy的隔离级别

来自分类Dev

用Flask-SQLAlchemy查询

来自分类Dev

Flask-SQLAlchemy-大于或等于

来自分类Dev

Flask sqlalchemy-最小应用

来自分类Dev

从flask_sqlalchemy导入UniqueConstraint

来自分类Dev

Flask SQLAlchemy order_by关系

来自分类Dev

Flask-SQLAlchemy多对多

来自分类Dev

Flask SQLAlchemy的Table(Model)继承

Related 相关文章

热门标签

归档