質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

1回答

2649閲覧

flask-adminモジュールについて/importができない

退会済みユーザー

退会済みユーザー

総合スコア0

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1グッド

1クリップ

投稿2018/02/04 17:40

編集2018/02/07 08:11

ご教授願います。
現在Flaskを利用したwebアプリを作成しており、管理画面作成にはFlask-Adminモジュールを使用しようと思っております。
python自体が初めて1週間ほどの素人ですので、本を読みながら進めているのですが、どうも本とまったく同じコードを実装してもエラーが出てしまいます。
プログラムの目的としては、まずはモデルと紐付けをしたデータベースの内容を管理画面に表示するだけという簡易なものです。
環境
・mac high sierra
・pycharm
・python3.6.4
・mysql5.6
使用しているファイル(実際に書いたコード)は2つで、
・flask_admin_server.py(メイン)
・app_db.py

python

1from flask import Flask 2import flask_admin 3from flask_admin.contrib.peewee import ModelView # ここでエラー 4import app_db 5app = Flask(__name__) 6# app.config['SECRET_KEY'] 7class WriterAdmin(ModelView): 8 column_display_pk = True 9 column_sortable_list = ('id', 'name', 'is_active') 10 column_filters = column_sortable_list 11 column_editable_list = ('name', 'is_active') 12 form_columns = column_sortable_list 13 def on_model_change(self, form, model, is_created): 14 if is_created: 15 model.save(force_insert = True) 16@app.route('/') 17def index(): 18 return '<a href="/admin/">Click!</a>' 19if __name__ == '__main__': 20 admin = flask_admin.Admin(app, name = 'Example: Peewee') 21 admin.add_view(WriterAdmin(app_db.Writer)) 22 app.run(debug = True)

python

1import datetime 2import peewee 3from playhouse.pool import PooledMySQLDatabase 4db = PooledMySQLDatabase( 5 '○○○', 6 max_connections = 8, 7 stale_timeout = 10, 8 user = '○○○', 9 password = '○○○', 10 unix_socket = '/Applications/MAMP/tmp/mysql/mysql.sock' 11) 12class BaseModel(peewee.Model): 13 created_at = peewee.DateTimeField(default = datetime.datetime.utcnow) 14 updated_at = peewee.DateTimeField() 15 def save(self, *args, **kwargs): 16 self.updated_at = datetime.datetime.utcnow() 17 super().save(*args, **kwargs) 18 class Meta: 19 database = db 20class Writer(BaseModel): 21 id = peewee.IntegerField(primary_key = True) 22 name = peewee.CharField() 23 is_active = peewee.BooleanField() 24 class Meta: 25 db_table = 'writers'

エラー内容

console

1/Users/○○○/.pyenv/versions/3.6.4/bin/python 2/Users/○○○/Desktop/python/flask_admin_server.py 3Traceback (most recent call last): 4 File "/Users/○○○/Desktop/python/flask_admin_server.py", line 3, in <module> 5 from flask_admin.contrib.peewee import ModelView 6 File "/Users/○○○/.pyenv/versions/3.6.4/lib/python3.6/site-packages/flask_admin/contrib/peewee/__init__.py", line 8, in <module> 7 from .view import ModelView 8 File "/Users/○○○/.pyenv/versions/3.6.4/lib/python3.6/site-packages/flask_admin/contrib/peewee/view.py", line 15, in <module> 9 from .form import get_form, CustomModelConverter, InlineModelConverter, save_inline 10 File "/Users/○○○/.pyenv/versions/3.6.4/lib/python3.6/site-packages/flask_admin/contrib/peewee/form.py", line 3, in <module> 11 from peewee import (CharField, DateTimeField, DateField, TimeField, 12ImportError: cannot import name 'BaseModel' 13Process finished with exit code 1

/Users/○○○/.pyenv/versions/3.6.4/lib/python3.6/site-packages/flask_admin/contrib/peewee/form.pyでBaseModelがインポートできてないということでしたので、form.pyの該当部分を追って見たところ、下記のソースコードが書いてありました。

python

1from peewee import (CharField, DateTimeField, DateField, TimeField, 2 PrimaryKeyField, ForeignKeyField, BaseModel)

flask_admin/contrib/peewee/form.pyはさらに/Users/○○○/.pyenv/versions/3.6.4/lib/python3.6/site-packages/peewee.pyのBaseModelをimportしようとしているようですが、peewee.pyにはBaseModelメンバはありません。(BaseModel以外のメンバは全てありました)
この時点で頭が?なのですが、どなたか原因と解決法を教えていただけますでしょうか。
進めていた本にはモジュールのインストール場所を特に指定することもなく、とりあえずいろいろとインストールしていたので、それの影響かもしれません。
それではどうぞ宜しくお願いいたします。

peketamin👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

peewee と、その関連ライブラリである wtf-peewee の最新メジャーバージョンは3系のようで、peewee 内部構成が2系と変わったことが原因のようです。
下記のように pip でこれらのバージョンを指定してインストールすることで解消されるのではないかと思います。

$ pip install peewee==2.10.1 wtf-peewee==0.2.6

お試し頂ければと思います。

投稿2018/02/09 16:43

peketamin

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問