0

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

  • 烧瓶:0.10.1
  • 烧瓶管理员:1.0.7
  • Flask-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)
4

1 回答 1

1

mrjoes见这里):“Flask-Admin 对继承模型的支持有限。我将致力于改进继承支持,但现在非常忙。

在这种特殊情况下,Flask-Admin 检测到多主键模型(用户有两个主键 - id 和继承的 global_id),并在进行查询时尝试将它们传递给 SQLAlchemy。”

于 2014-02-03T12:33:24.597 回答