После запуска кода без ошибок следующий код вызывает InvalidRequestError при нажатии кнопки «Изменить запись» или «Удалить запись» на вкладке «Пользователь». Эта ошибка возникает при использовании наследования, как показано в коде. Я думаю, что это ошибка в Flask-Admin; У кого-нибудь есть идея?
InvalidRequestError: неверное количество значений в идентификаторе для формулировки первичного ключа для query.get(); столбцы первичного ключа 'identities.global_id'
Эти версии Flask, которые я использовал:Inheritance вызывает InvalidRequestError in Flask
- Настой: 0.10.1
- Колба-Admin: 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)
При проводке об ошибке, это полезно, если вы публикуете полную трассировку. Когда вы увидите ошибку на странице ошибки, вы можете щелкнуть заголовок «Traceback», чтобы получить «Копировать/Вставить дружественную версию» трассировки, которую вы можете затем задать в свой вопрос –
Спасибо, человек, я обновил вопрос. – met1366