やりたいこと
models.pyにテーブルがいっぱいあると、admin.pyへの記述が大変。
自動でやってほしい。
⇣
django-extensions
というライブラリのadmin_generator
コマンドを使うと自動でやってくれます。
models.pyの内容に合わせてうまいことやってくれます。
django-extensionsって?
django-extensions
はmanage.py
の機能を拡張してくれるもので、 他にもいろいろながコマンドがあります。
インストール
インストールして
$ pip install django-extensions
settings.pyに追記するだけ
pj_name/settings.py
...
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_extensions', # <- 追記
]
...
実行
出力結果をadmin.pyに上書きします。
$APP
には $ python manage.py startapp xxx
で作ったアプリケーション名が入ります。
$ python manage.py admin_generator $APP > $APP/admin.py
結果
たとえばこんなclassは
models.py
...
class Users(models.Model):
user_name = models.CharField(max_length=255)
last_name = models.CharField(max_length=255)
first_name = models.CharField(max_length=255)
email = models.CharField(max_length=255)
created_at = models.DateTimeField()
updated_at = models.DateTimeField()
del_flg = models.IntegerField()
class Meta:
managed = False
db_table = 'users'
...
こんな感じ
admin.py
...
@admin.register(Users)
class UsersAdmin(admin.ModelAdmin):
list_display = (
'id',
'user_name',
'last_name',
'first_name',
'email',
'created_at',
'updated_at',
'del_flg',
)
list_filter = ('created_at', 'updated_at')
date_hierarchy = 'created_at'
...
管理画面にログインするユーザーを作成
$ python manage.py createsuperuser
Username (leave blank to use 'anata_no_home_dir'): <- 任意の名前
Email address: <- 任意のメールアドレス
Password: <- パスワード
Password (again): <- もう一回
Superuser created successfully.
ローカルサーバを起動
$ python manage.py runserver
ここにアクセス
http://127.0.0.1:8000/admin/
先程つくったユーザー情報でログイン -> テーブルが表示されていればOKです。
おしまい
最後まで読んでいただきありがとうございました。