2017-05-11 16 views
-1

私は以下の使用して、プロジェクトの審査を保存しようとしていた、と選択フィールドが正しく示しています。しかしフラスコ管理者:sqlalchemy.exc.InterfaceError(エラーパラメータバインディング8)

# Query the user with Role.id == 4 as reviewer 
def reviewer_choices(): 
    return User.query.join(User.roles).filter(Role.id == 4) 

# Build a select field 
class ProjectView(sqla.ModelView): 
form_extra_fields = { 
    'reviewer': sqla.fields.QuerySelectField(
    label='Reviewer', 
    query_factory=reviewer_choices, 
)} 

、私が保存しようとしたとき、エラーが発生しました:

InterfaceError: (sqlite3.InterfaceError) Error binding parameter 8 - probably unsupported type. [SQL: u'INSERT INTO project(...reviewer...)VALUES(...<__main__.User object at 0x00000000048E89E8>...)

そして、私は査読者がオブジェクトであることに気づいた。<__main__.User object at 0x00000000048E89E8>。だから私はそれをデータベースに保存できるので、レビューアの正しいデータタイプは何ですか?

CREATE TABLE `project` (
    # ... 
    `reviewer1` TEXT, 
    # ... 

プロジェクトテーブルで

プロジェクトのクラスで

class Project(db.Model): 
    # ... 
    reviewer = db.Column(db.Unicode(128)) 
    # ... 

そして私も__repr____str__を定義しようとしたが、両方が働いていない:私は現在使用

class User(db.Model, UserMixin): 
    id = db.Column(db.Integer, primary_key=True) 
    first_name = db.Column(db.String(255)) 
    # ... 
    # ... 
    def __repr__(self): 
    return self.first_name 

class User(db.Model, UserMixin): 
    id = db.Column(db.Integer, primary_key=True) 
    first_name = db.Column(db.String(255)) 
    # ... 
    # ... 
    def __str__(self): 
    return self.first_name 

答えて

0

それは明らかです。レビューアはProjectで定義された文字列です。ユーザーモデルで__repr__関数を定義して、文字列(ユーザー名など)を返すことができます。これをチェックしてくださいquestion

+0

ありがとうございますが、今でも 'InterfaceError:'を返していません。 – Samoth

+0

ユーザモデルで '__str__'関数を定義しようとしてください。 – stamaimer

+0

はい、私は '__str__'を使用していて、' __repr__'に切り替えましたが、どちらもうまくいきませんでした。 – Samoth

関連する問題