簡単なAdminサイトコマンド

22175 ワード

adminの基礎構成
1管理インタフェースのローカライズ
settings.pyで言語とタイムゾーンを設定する
LANGUAGE_CODE = 'zh-hans' #       
TIME_ZONE = 'Asia/Shanghai' #         

2スーパー管理者の作成
管理者を作成するコマンドは、ユーザー名、メールボックス、パスワードをプロンプトで入力します.
python manage.py createsuperuser

在这里插入图片描述ブラウザを開き、アドレスバーに次のようなアドレスを入力して車に戻ります.
http://127.0.0.1:8000/admin/

一些简单Admin站点命令_第1张图片 一些简单Admin站点命令_第2张图片
3モデルクラスの登録
バックグラウンド管理にログインすると、作成したアプリケーションで定義されたモデルクラスがデフォルトではなく、自分のアプリケーションでadminが必要です.pyファイルに登録すると、バックグラウンド管理で表示され、削除変更操作が行えます.
booktest/adminを開きます.pyファイル、次のコードを作成します:(ここでは自分のファイル名のパスで、自分で定義したモデルクラスをインポートします)
from django.contrib import admin
from booktest.models import BookInfo,HeroInfo


ブラウザでページをリフレッシュすると、モデルクラスBookInfoとHeroInfoの管理が表示されます.
4.Admin管理クラスの定義と使用
管理クラスを使用するには、次の2つの方法があります.
パラメータの登録
admin.site.register(BookInfo,BookInfoAdmin)

デコレーション
@admin.register(BookInfo)
class HeroInfoAdmin(admin.ModelAdmin):
    pass

Djangoが提供するAdminサイトの表示効果は、ModelAdminクラスをカスタマイズすることで制御できます.
管理クラスを定義するにはadminから継承する必要がある.ModelAdminクラス、以下のように
from django.contrib import admin

class BookInfoAdmin(admin.ModelAdmin):
    pass

@admin.register(HeroInfo)
class HeroInfoAdmin(admin.ModelAdmin):
    pass
    
admin.site.register(BookInfo,BookInfoAdmin)

1.ページサイズ
各ページに表示されるデータの数、デフォルトでは各ページに5つのデータが表示されます.プロパティは次のとおりです.
list_per_page=5

2「操作オプション」の場所
上部に表示されるプロパティは、Trueが上部に表示されるように設定され、Falseが上部に表示されないように設定され、デフォルトはTrueです.
actions_on_top=True

下部に表示されるプロパティは、Trueが下部に表示されるように設定され、Falseが下部に表示されないように設定され、デフォルトはFalseです.
actions_on_bottom=False

3リストの列
属性は次のとおりです.
list_display=[    1,    2,...]

4メソッドを列として使用
カラムは、モデルフィールドでもモデルメソッドでもあり、メソッドに戻り値が必要です.
short_を設定するdescriptionプロパティ.adminサイトに表示されるカラム名を設定できます.
class BookInfo(models.Model):
	def pub_date(self):
	        return self.bpub_date.strftime('%Y %m %d ')
	
	    pub_date.short_description = '    '
class BookInfoAdmin(admin.ModelAdmin):
 	list_display = ['id','atitle','pub_date']

5関連オブジェクト
関連オブジェクトのプロパティまたはメソッドに直接アクセスできません.モデルクラスでメソッドをカプセル化し、関連オブジェクトのメンバーにアクセスできます.
class HeroInfo(models.Model):
   
    def read(self):
        return self.hbook.bread

    read.short_description = '     '
class HeroInfoAdmin(admin.ModelAdmin):
    
    list_display = ['id', 'hname', 'hbook', 'read']


6右側のバーフィルタ
プロパティは次のとおりです.フィールドのみが受信され、対応するフィールドの値がリストされ、高速フィルタリングに使用されます.一般的には、重複する値を持つフィールドで使用されます.
list_filter=[]

7検索ボックス
プロパティは、指定したフィールドの値を検索するために使用され、ファジイクエリをサポートします.リストのタイプ.これらのフィールドで検索されることを示します.
search_fields=[]

編集ページの表示の調整
1.フィールドの表示
属性は次のとおりです.
fields=[]

2.グループ表示
属性は次のとおりです.
fieldset=(
    (' 1  ',{'fields':('  1','  2')}),
    (' 2  ',{'fields':('  3','  4')}),
)

3.関連オブジェクト
1対多の関係では、一端の編集ページで多端のオブジェクトを編集できます.多端のオブジェクトを埋め込む方法には、表、ブロックの2種類があります.
タイプInlineModelAdmin:モデルの編集ページに関連モデルの編集を埋め込むことを示します.サブクラスTabularInline:表形式で埋め込まれます.サブクラスStackedInline:ブロックとして埋め込まれます.
class HeroInfoStackInline(admin.StackedInline):
    model = HeroInfo  #       
    extra = 1  #        

class BookInfoAdmin(admin.ModelAdmin):
    inlines = [HeroInfoStackInline]


サイト情報の調整
Adminサイトの名前情報もカスタマイズできます.
admin.site.site_header       
admin.site.site_title       
admin.site.index_title       

画像をアップロード
Djangoにはファイルシステムのサポートがあり、Adminサイトで簡単に画像をアップロードできます.
Adminサイトで画像を保存するには、Pythonの画像操作パッケージをインストールする必要があります
pip install Pillow

以前に設定したstatic_のように、アップロードしたファイルを静的ファイルディレクトリに保存できます.filesディレクトリにsettings.pyファイルに次のアップロード保存ディレクトリ情報を追加
MEDIA_ROOT=os.path.join(BASE_DIR,"       ")

ケースコード:
admin.py
from django.contrib import admin

# Register your models here.
# from django.contrib import admin
from .models import BookInfo,HeroInfo


admin.site.site_header="  "#
admin.site.site_title="   "
admin.site.index_title="       "


class HeroInfoTabularInline(admin.StackedInline):

    model = HeroInfo
    extra = 1

class BookInfoAdmin(admin.ModelAdmin):
    list_display = ['id', 'btitle', 'pub_date']
    # fields=['btitle','bpub_date']
    fieldsets = (
        ('  ', {'fields': ['btitle', 'bpub_date']}),
        ('  ', {
            'fields': ['bread', 'bcomment','image',],
            'classes': ('collapse',)  #       
        })
    )
    inlines=[HeroInfoTabularInline]


@admin.register(HeroInfo)
class HeroInfoAdmin(admin.ModelAdmin):

    list_per_page = 5  #  
    actions_on_top = True
    actions_on_bottom = True
    list_display = ['id', 'hname','hbook','read']
    list_filter=['hbook','hgender']
    search_fields = ['hname']

admin.site.register(BookInfo,BookInfoAdmin)

models.py
from django.db import models
from django.contrib import admin
# Create your models here.
class BookInfo(models.Model):
    btitle = models.CharField(max_length=20, verbose_name='  ')
    bpub_date = models.DateField(verbose_name='    ')
    bread = models.IntegerField(default=0, verbose_name='   ')
    bcomment = models.IntegerField(default=0, verbose_name='   ')
    is_delete = models.BooleanField(default=False, verbose_name='    ')
    image = models.ImageField(upload_to='booktest', verbose_name='  ', null=True)
    class Meta:
        db_table = 'tb_books'  #        
        verbose_name = '  '  #  admin        
        verbose_name_plural = verbose_name  #        

    def __str__(self):
        """             """
        return self.btitle

    def pub_date(self):
        return self.bpub_date.strftime('%Y %m %d ')

    pub_date.short_description = '    '
    pub_date.admin_order_field = 'bpub_date'

class HeroInfo(models.Model):
    GENDER_CHOICES = (
        (0, 'male'),
        (1, 'female')
    )
    hname = models.CharField(max_length=20, verbose_name='  ')
    hgender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name='  ')
    hcomment = models.CharField(max_length=200, null=True, verbose_name='    ')
    hbook = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name='  ')  #   
    is_delete = models.BooleanField(default=False, verbose_name='    ')
    # image = models.ImageField(upload_to='booktest', verbose_name='  ', null=True)
    class Meta:
        db_table = 'tb_heros'
        verbose_name = '  '
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.hname
    def read (self):
        return self.hbook.bread
    read.short_description='     '