After running the code without any error the following code will causes an InvalidRequestError when pushing the "Edit record" or "Delete record" button in the User tab. This error is raised when using inheritance as demonstrated in code. I think it's a bug in Flask-Admin; Does anybody have an idea??
InvalidRequestError: Incorrect number of values in identifier to formulate primary key for query.get(); primary key columns are 'identities.global_id'
These are the Flask versions which I've used:
- Flask: 0.10.1
- Flask-Admin: 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)