2014-01-23 3 views
0

После запуска кода без ошибок следующий код вызывает 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) 
+0

При проводке об ошибке, это полезно, если вы публикуете полную трассировку. Когда вы увидите ошибку на странице ошибки, вы можете щелкнуть заголовок «Traceback», чтобы получить «Копировать/Вставить дружественную версию» трассировки, которую вы можете затем задать в свой вопрос –

+0

Спасибо, человек, я обновил вопрос. – met1366

ответ

0

mrjoes (see here): «Flask-Admin имеет ограниченную поддержку унаследованной модели. Я собираюсь работать над улучшенной поддержкой наследования, но сейчас очень занят.

В данном конкретном случае, колба-Admin обнаруживает несколько первичного ключ модели (Пользователь имеет два основных ключа - идентификатор и унаследованный global_id). И пытается передать их SQLAlchemy при выполнении запроса»