Django-extentions の admin_generator で admin.py を自動生成する


Django で model をたくさん作った後に、いざadmin.py を編集しようとして、
数が多すぎて、面倒くさいと思い、これ何かdjnago-extentions あたりに、
それっぽいコマンドがあるか見てみたところ、
admin_generator というコマンドがあり、こいつを使ってみた結果を記載します。

使用しているDjango Version

使用Version は 1.10 です。

pip list
----------------------------
Django (1.10)
----------------------------

admin_generator の実行結果

  • まず、コマンドの一覧を出力

    python3 manage.py 
    -----------------------------
    
    [django_extensions]
        admin_generator
        clean_pyc
        clear_cache
        compile_pyc
        create_app
        create_command
        create_jobs
        create_template_tags
        describe_form
        drop_test_database
        dumpscript
        export_emails
        find_template
        generate_secret_key
        graph_models
        mail_debug
        notes
        passwd
        pipchecker
        print_settings
        print_user_for_session
        reset_db
        runjob
        runjobs
        runprofileserver
        runscript
        runserver_plus
        set_default_site
        set_fake_emails
        set_fake_passwords
        shell_plus
        show_template_tags
        show_templatetags
        show_urls
        sqlcreate
        sqldiff
        sqldsn
        sync_s3
        syncdata
        unreferenced_files
        update_permissions
        validate_templates
    
    -----------------------------
    

  • Application 指定でadmin.py を生成する

    python3 manage.py admin_generator festivals
    
    標準出力にfestivals配下の全てのModelクラスのAdminが記載された
    pythonファイルが出力されます。
    ※結果は一部抜粋しています。
    # -*- coding: utf-8 -*-
    from django.contrib import admin
    
    from .models import ContactMailTaskManage
    
    class ContactMailTaskManageAdmin(admin.ModelAdmin):
        list_display = ('id', 'name', 'email', 'subject', 'message', 'mail_send')
        list_filter = ('mail_send',)
        search_fields = ('name',)
    admin.site.register(ContactMailTaskManage, ContactMailTaskManageAdmin)
    

  • model 指定(1つ)で、admin.pyを出力する

    python3 manage.py admin_generator festivals4partypeople EchonestArtistTaskManage
    
    指定したModelクラスのAdminが記載されたpythonファイルが出力されます。
    # -*- coding: utf-8 -*-
    from django.contrib import admin
    
    from .models import EchonestArtistTaskManage
    
    
    class EchonestArtistTaskManageAdmin(admin.ModelAdmin):
        list_display = (
            'id',
            'echonest_artist',
            'store_eartist_detail_task_update_date',
            'store_esong_task_update_date',
            'store_eimage_task_update_date',
            'store_sctrack_task_update_date',
            'store_mcartist_task_update_date',
            'store_evideo_task_update_date',
            'store_ebiography_task_update_date',
            'store_eblog_task_update_date',
            'create_date',
            'update_date',
        )
        list_filter = (
            'store_eartist_detail_task_update_date',
            'store_esong_task_update_date',
            'store_eimage_task_update_date',
            'store_sctrack_task_update_date',
            'store_mcartist_task_update_date',
            'store_evideo_task_update_date',
            'store_ebiography_task_update_date',
            'store_eblog_task_update_date',
            'create_date',
            'update_date',
        )
        raw_id_fields = ('echonest_artist',)
    admin.site.register(EchonestArtistTaskManage, EchonestArtistTaskManageAdmin)
    

  • model 指定(複数)で、admin.pyを出力する

python3 manage.py admin_generator festivals4partypeople EchonestArtistTaskManage Genre
指定したModelクラスのAdminが記載されたpythonファイルが出力されます。
Genreは外部キーで他のエンティティと関係があるため、それも出力されています。
# -*- coding: utf-8 -*-
from django.contrib import admin

from .models import Genre, EchonestArtistTaskManage, GenreFestivalRelation


class GenreAdmin(admin.ModelAdmin):
    list_display = (
        'id',
        'genre_name',
        'description',
        'create_date',
        'update_date',
    )
    list_filter = ('create_date', 'update_date')
admin.site.register(Genre, GenreAdmin)


class EchonestArtistTaskManageAdmin(admin.ModelAdmin):
    list_display = (
        'id',
        'echonest_artist',
        'store_eartist_detail_task_update_date',
        'store_esong_task_update_date',
        'store_eimage_task_update_date',
        'store_sctrack_task_update_date',
        'store_mcartist_task_update_date',
        'store_evideo_task_update_date',
        'store_ebiography_task_update_date',
        'store_eblog_task_update_date',
        'create_date',
        'update_date',
    )
    list_filter = (
        'store_eartist_detail_task_update_date',
        'store_esong_task_update_date',
        'store_eimage_task_update_date',
        'store_sctrack_task_update_date',
        'store_mcartist_task_update_date',
        'store_evideo_task_update_date',
        'store_ebiography_task_update_date',
        'store_eblog_task_update_date',
        'create_date',
        'update_date',
    )
    raw_id_fields = ('echonest_artist',)
admin.site.register(EchonestArtistTaskManage, EchonestArtistTaskManageAdmin)


class GenreFestivalRelationAdmin(admin.ModelAdmin):
    list_display = ('id', 'genre', 'festival', 'create_date', 'update_date')
    list_filter = ('genre', 'festival', 'create_date', 'update_date')
admin.site.register(GenreFestivalRelation, GenreFestivalRelationAdmin)

  • HELP出力 実際は、詳細説明が出力されるため、もっと長いです。 DATE_HIERARCHYPREPOPULATED_FIELDSSEARCH_FIELD等、
    指定できるoptionがあります。
    ※作り込みしない限りはデフォルトで問題ないかと思います。
    python3 manage.py admin_generator -h
    
    -----------------------------
    usage: manage.py admin_generator [-h] [--version] [-v {0,1,2,3}]
                                     [--settings SETTINGS]
                                     [--pythonpath PYTHONPATH] [--traceback]
                                     [--no-color] [-s SEARCH_FIELD]
                                     [-d DATE_HIERARCHY] [-p PREPOPULATED_FIELDS]
                                     [-l LIST_FILTER_THRESHOLD]
                                     [-r RAW_ID_THRESHOLD]
                                     app_name [model_name [model_name ...]]
    
    -----------------------------
    

以上です。
これ、便利ですね。

コメント