Django admin後臺管理的配置

最近整理了一些關於Django admin後臺管理的資料

model:

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
# Create your models here.


class Post(models.Model):
    STATUS_CHOICES = (('draft', 'Draft'), ('published', 'Published'))
    title = models.CharField(max_length=250, verbose_name='文章標題')
    # 通常在URL中使用。slug是一個短的字符串,只能包含字母,數字,下劃線和減號。將使用slug字段構成優美的URL,也方便搜索引擎搜索
    # unique_for_date參數表示不允許兩條記錄的publish字段日期和title字段全都相同,這樣就可以使用文章發佈的日期與slug字段共同生成一個唯一的URL標識該文章。
    slug = models.SlugField(max_length=250, unique_for_date='publish', verbose_name='url')
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blog_posts', verbose_name='作者')
    body = models.TextField()
    # 自帶datetime.now()
    publish = models.DateTimeField(default=timezone.now(), verbose_name='時間')
    # auto_now_add表示當創建一行數據的時候,自動用創建數據的時間填充
    created = models.DateTimeField(auto_now_add=True, verbose_name='創建時間')
    # auto_now表示每次更新數據的時候,都會用當前的時間填充該字段
    updated = models.DateTimeField(auto_now=True, verbose_name='更新時間')
    # choices參數,所以這個字段的值只能爲一系列選項中的值。
    status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft')

    class Meta:
        # 指定了Django在進行數據庫查詢的時候,默認按照發布時間的逆序將查詢結果排序。
        # 逆序通過加在字段名前的減號表示。這樣最近發佈的文章就會排在前邊。
        ordering = ('-publish',)

    # __str__()方法是Python類的功能,供顯示給人閱讀的信息,這裏將其設置爲文章的標題。
    # Django在很多地方比如管理後臺中都調用該方法顯示對象信息。
    def __str__(self):
        return self.title

爲Post模型遷移數據,blog爲app名稱,可以不寫,那麼就會給所有項目遷移數據庫

                 遷移:

                               python manage.py makemigrations blog
                 查看生成的SQL語句,0001是我們執行上面的命令會在blog應用下的migrations目錄裏新增一個0001_initial.py文件,裏面包含了一個遷移數據文件裏包含了與其他遷移數據的依賴關係,以及實際要對數據庫執行的操作。

                               python manage.py sqlmigrate blog 0001

                 然後來讓數據庫與新的數據模型進行同步

                                python manage.py migrate

                 接着就會看到控制檯輸出:

                                Applying blog.0001_initial... OK

 

如果要使用後臺管理,就需要先註冊一個超級用戶

           python manage.py createsuperuser

然後會看到以下輸出

            Username (leave blank to use 'admin'): admin

            Email address: [email protected]

            Password: ********

            Password (again): ********

            Superuser created successfully.

 

啓動項目

          python manage.py runserver

打開   http://127.0.0.1:8000/admin/

           

輸入用戶名密碼登錄

            

向管理後臺添加模型

from django.contrib import admin
from .models import Post
# Register your models here.


admin.site.register(Post)

每當在管理後臺中註冊一個模型,就能迅速在管理後臺中看到它,還可以對其進行增刪改查

我們點擊增加

            

我們新增數據,點擊保存後

   

      我們能在這看到這個: title: 今天是個開心的日子, 是因爲我們model中寫了

           def __str__(self):
                 return self.title

然後我們想顯示更多字段怎麼辦,當然可以接着在return後面寫,但是有一種更好的方法,在admin.py中寫

from django.contrib import admin
from .models import Post
# Register your models here.


class PostAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug', 'author', 'publish', 'status',)

admin.site.register(Post, PostAdmin)

register也可以這樣寫:兩種方法都可以

from django.contrib import admin
from .models import Post
# Register your models here.

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):

然後我們會看到後臺中這樣顯示

可以看到在該頁面上顯示的字段就是list_display中的字段

增加  list_filter = ('status', 'created', 'publish', 'author',)

from django.contrib import admin
from .models import Post
# Register your models here.

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug', 'author', 'publish', 'status',)
    list_filter = ('status', 'created', 'publish', 'author',)

頁面出現了一個右側邊欄用於篩選結果,這個功能由list_filter屬性控制

增加  search_fields = ('title', 'body',)

from django.contrib import admin
from .models import Post
# Register your models here.

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug', 'author', 'publish', 'status',)
    list_filter = ('status', 'created', 'publish', 'author',)
    search_fields = ('title', 'body',)

頁面上方出現了一個搜索欄,這是因爲在search_fields中定義了可搜索的字段

增加 prepopulated_fields = {'slug': ('title',)}

from django.contrib import admin
from .models import Post
# Register your models here.

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug', 'author', 'publish', 'status',)
    list_filter = ('status', 'created', 'publish', 'author',)
    search_fields = ('title', 'body',)
    prepopulated_fields = {'slug': ('title',)}

這個時候點擊Add Post,可以發現也有變化。當輸入文章標題時,slug字段會根據標題自動填充,這是因爲設置了prepopulated_fields屬性中slug字段與title字段的對應關係。

增加    raw_id_fields = ('author',)

from django.contrib import admin
from .models import Post
# Register your models here.

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug', 'author', 'publish', 'status',)
    list_filter = ('status', 'created', 'publish', 'author',)
    search_fields = ('title', 'body',)
    prepopulated_fields = {'slug': ('title',)}
    raw_id_fields = ('author',)

作者字段旁邊出現了一個搜索圖標,並且可以按照ID來查找和顯示作者,如果在用戶數量很大的時候,這就方便太多了。

增加   date_hierarchy = 'publish'

from django.contrib import admin
from .models import Post
# Register your models here.

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug', 'author', 'publish', 'status',)
    list_filter = ('status', 'created', 'publish', 'author',)
    search_fields = ('title', 'body',)
    prepopulated_fields = {'slug': ('title',)}
    raw_id_fields = ('author',)
    date_hierarchy = 'publish'

在搜索欄的下方,出現了時間層級導航條

增加  ordering = ('status', 'publish',)

from django.contrib import admin
from .models import Post
# Register your models here.

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug', 'author', 'publish', 'status',)
    list_filter = ('status', 'created', 'publish', 'author',)
    search_fields = ('title', 'body',)
    prepopulated_fields = {'slug': ('title',)}
    raw_id_fields = ('author',)
    date_hierarchy = 'publish'
    ordering = ('status', 'publish',)

默認通過Status和Publish字段進行排序

 

以上就是admin後臺中的一些配置了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章