2014-01-23 27 views
0

在没有任何错误的情况下运行代码之后,在用户选项卡中按下“编辑记录”或“删除记录”按钮时,以下代码将导致InvalidRequestError。如代码中所示,使用继承时引发此错误。我认为这是Flask-Admin中的一个错误;有人有想法吗?
InvalidRequestError:标识符中的值的数量不正确,以便为query.get()创建主键。主键列 'identities.global_id'
这些都是我用过的瓶版本:继承导致Flask中的InvalidRequestError

  • 瓶:0.10.1
  • 烧瓶管理:1.0.7
  • 瓶,SQLAlchemy的:1.0

import os 
import os.path as op 
from flask import Flask 
from flask.ext.sqlalchemy import SQLAlchemy 

from flask.ext import admin 
from flask.ext.admin.contrib import sqla 

app = Flask(__name__) 
app.config['SECRET_KEY'] = '123456790' 
app.config['DATABASE_FILE'] = 'sample_db.sqlite' 
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + app.config['DATABASE_FILE'] 
app.config['SQLALCHEMY_ECHO'] = True 
db = SQLAlchemy(app) 

# Model with inheritance 
########################### 
class Identity(db.Model): 
    __tablename__ = 'identities' 
    global_id = db.Column(db.Integer, primary_key=True) 
    _dto_type = db.Column('dto_type', db.String, nullable=False) 
    __mapper_args__ = {'polymorphic_on': _dto_type} 


class User(Identity): 
    __mapper_args__ = {'polymorphic_identity': 'Operator'} 
    id = db.Column(db.ForeignKey('identities.global_id'), primary_key=True) 
    name = db.Column(db.String(100)) 

    def __str__(self): 
     return self.username 

# Views 
####### 
@app.route('/') 
def index(): 
    return '<a href="/admin/">Click me to get to Admin!</a>' 

# Create admin 
admin = admin.Admin(app, 'Simple Models') 
admin.add_view(sqla.ModelView(User, db.session)) 

if __name__ == '__main__': 
    db.create_all() 
    u = User(name='TestUser') 
    db.session.add(u) 
    db.session.commit() 
    app_dir = op.realpath(os.path.dirname(__file__)) 
    database_path = op.join(app_dir, app.config['DATABASE_FILE']) 
    app.run(debug=True, port=5003) 
+0

投递错误,如果您发布完整的回溯信息会很有帮助当您在错误页面中看到错误时,您可以单击“Traceback”标题以获得回溯的“复制/粘贴友好版本”,然后您可以将其置入您的问题中 –

+0

谢谢你,我已经更新了这个问题。 – met1366

回答

0
mrjoes

see here):“Flask-Admin对继承模型的支持有限。我将继续努力改进继承支持,但现在非常繁忙。

在这个特定的情况下,烧瓶管理员检测多主键模型(用户具有两个主键 - 编号和继承global_id)。并试图使查询时将它们传递给SQLAlchemy的”