在没有任何错误的情况下运行代码后,当按下“用户”选项卡中的“编辑记录”或“删除记录”按钮时,以下代码将导致 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)