ご教授願います。
現在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以外のメンバは全てありました)
この時点で頭が?なのですが、どなたか原因と解決法を教えていただけますでしょうか。
進めていた本にはモジュールのインストール場所を特に指定することもなく、とりあえずいろいろとインストールしていたので、それの影響かもしれません。
それではどうぞ宜しくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。