1. 程式人生 > >Django-CRM項目學習(一)-admin組件

Django-CRM項目學習(一)-admin組件

add price 啟動 pad line src book actions ret

開始今日份整理

1.admin組件使用

1.1 創建django項目以及開啟APP01

1.2 創建類

使用django自帶的sqlite3的小型文件型的數據庫

註:使用sqlite3類型的數據庫需要下載驅動

在app01.models創建類

from django.db import models

# Create your models here.

class Book(models.Model):
    title = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=5, decimal_places=2)
    pub_date 
= models.DateField() publish = models.ForeignKey(Publish, on_delete=models.CASCADE, null=True) # modeles.CASCADE設置串行,由於和出版社關聯,在刪除出版社的只會刪除外鍵,不會刪除對象,只有在null # 為True才可以刪除。 staes = models.IntegerField(choices=[(1,已出版),(2,未出版)],default=1) author = models.ManyToManyField(Author
) # 一對多關系 def __str__(self): return self.title class Publish(models.Model): # 出版社類 name = models.CharField(max_length=32) city = models.CharField(max_length=32) email = models.EmailField() def __str__(self): return self.name class Author(models.Model):
# 作者類 name = models.CharField(max_length=32) age = models.IntegerField() au_detail = models.OneToOneField(Author_detail,on_delete=models.CASCADE,null=True) def __str__(self): return self.name class Author_detail(models.Model): # 作者詳情類 tel = models.CharField(max_length=32) address = models.CharField(max_length=64)

使用manage.py文件創建數據表並寫入到數據庫中,同時創建超級用戶

makemigrations:將庫寫入到內存中
migrate:將內存中的數據寫入到數據庫中

createsuperuser:創建超級用戶,用於登陸admin頁面

1.3 admin.py文件編輯

從app01.models中引入項目各個類

技術分享圖片

在下面輸入要創建的頁面

admin.site.register(Book,BookConfig)
admin.site.register(Publish,PublishConfig)
admin.site.register(Author,AuthorConfig)
admin.site.register(Author_detail)

啟動項目,在網頁中打開,展示如下

技術分享圖片

輸入用戶名密碼,進入到展示頁面

技術分享圖片

1.4 添加數據並展示數據

在頁面上分別添加出版社,作者以及書籍

自定義展示列表

#創建一個自定義類
class BookConfig(admin.ModelAdmin):
    #用於展示多對多關系,展示書籍作者    
    def show_authors(self,obj):
        print("obj",obj)
        return |.join([obj.name for obj in obj.author.all()])

    # 用於展示
    list_display = [title,price,pub_date,publish,show_authors,staes]


#在book相關admin中添加自定義類,BookConfig為新增
admin.site.register(Book,BookConfig)

上面的list_display為內置用法,用於顯示,最後展示如下

技術分享圖片

1.5 批量操作

批量操作為action操作

在上面的BookConfig中寫入

#action操作
    # 價格初始化
    def patch_init(self,request,queryset):
        print(queryset,queryset)
        queryset.update(price=0)
    patch_init.short_description = 價格初始化#設置多選服務
    # 出版狀態初始化
    def states_status(self,request,queryset):
        queryset.update(staes=2)
    states_status.short_description =出版狀態初始化
    # 多選服務
    actions = [patch_init,states_status]


#其中.short_description以及actions為內置應用

展示如下

技術分享圖片

1.6 多重過濾

在上面的BookConfig類中寫入

#多重過濾
    list_filter = [publish,author]

#對出版社以及作者做過濾

展示如下

技術分享圖片

1.7 排序

在上面的BookConfig類中寫入

# 排序
    ordering = [price,-id]

#可以用倆個參數進行排序,默認是升序,加-號變為逆反

1.8 模糊查詢

# 模糊查詢
    search_fields = [title,price]

#如果title以及價格中都有特定的參數那麽都顯示

展示如下

技術分享圖片

admin整體代碼

技術分享圖片
from django.contrib import admin

# Register your models here.

from app01.models import Book,Publish,Author,Author_detail

class BookConfig(admin.ModelAdmin):
    def show_authors(self,obj):
        print("obj",obj)
        return |.join([obj.name for obj in obj.author.all()])

    # 用於展示
    list_display = [title,price,pub_date,publish,show_authors,staes]
    # 用於設置連接的內容
    list_display_links = [title,price]

    #action操作
    # 價格初始化
    def patch_init(self,request,queryset):
        print(queryset,queryset)
        queryset.update(price=0)
    patch_init.short_description = 價格初始化#設置多選服務
    # 出版狀態初始化
    def states_status(self,request,queryset):
        queryset.update(staes=2)
    states_status.short_description =出版狀態初始化
    # 多選服務
    actions = [patch_init,states_status]


    #多重過濾
    list_filter = [publish,author]

    # 排序
    ordering = [price,-id]

    # 模糊查詢
    search_fields = [title,price]


class PublishConfig(admin.ModelAdmin):
    list_display = [name,city,email]


class AuthorConfig(admin.ModelAdmin):
    def show_tel(self,obj):
        print(obj,obj)
        return obj.au_detail.tel
    def show_address(self,obj):
        print(obj,obj)
        return obj.au_detail.address
    list_display = [name,age,show_tel,show_address]

admin.site.register(Book,BookConfig)
admin.site.register(Publish,PublishConfig)
admin.site.register(Author,AuthorConfig)
admin.site.register(Author_detail)
admin整體代碼

1.9 其他操作

1.9.1 list_display,列表時,定制顯示的列。

@admin.register(models.UserInfo)
class UserAdmin(admin.ModelAdmin):
    list_display = (user, pwd, xxxxx)
 
    def xxxxx(self, obj):
        return "xxxxx"

1.9.2 list_display_links,列表時,定制列可以點擊跳轉。

@admin.register(models.UserInfo)
class UserAdmin(admin.ModelAdmin):
    list_display = (user, pwd, xxxxx)
    list_display_links = (pwd,)
1.9.3 list_filter,列表時,定制右側快速篩選。

1.9.4 list_select_related,列表時,連表查詢是否自動select_related

1.9.5 list_editable,列表時,可以編輯的列

@admin.register(models.UserInfo)
class UserAdmin(admin.ModelAdmin):
    list_display = (user, pwd,ug,)
    list_editable = (ug,)

1.9.6 search_fields,列表時,模糊搜索的功能

@admin.register(models.UserInfo)
class UserAdmin(admin.ModelAdmin):
     
    search_fields = (user, pwd)

1.9.7 date_hierarchy,列表時,對Date和DateTime類型進行搜索

@admin.register(models.UserInfo)
class UserAdmin(admin.ModelAdmin):
 
    date_hierarchy = ctime
1.9.8 inlines,詳細頁面,如果有其他表和當前表做FK,那麽詳細頁面可以進行動態增加和刪除
class UserInfoInline(admin.StackedInline): # TabularInline
    extra = 0
    model = models.UserInfo
 
 
class GroupAdminMode(admin.ModelAdmin):
    list_display = (id, title,)
    inlines = [UserInfoInline, ]

1.9.9 action,列表時,定制action中的操作

@admin.register(models.UserInfo)
class UserAdmin(admin.ModelAdmin):
 
    # 定制Action行為具體方法
    def func(self, request, queryset):
        print(self, request, queryset)
        print(request.POST.getlist(_selected_action))
 
    func.short_description = "中文顯示自定義Actions"
    actions = [func, ]
 
    # Action選項都是在頁面上方顯示
    actions_on_top = True
    # Action選項都是在頁面下方顯示
    actions_on_bottom = False
 
    # 是否顯示選擇個數
    actions_selection_counter = True

1.9.10 定制HTML模板

add_form_template = None
change_form_template = None
change_list_template = None
delete_confirmation_template = None
delete_selected_confirmation_template = None
object_history_template = None

1.9.11 raw_id_fields,詳細頁面,針對FK和M2M字段變成以Input框形式

@admin.register(models.UserInfo)
class UserAdmin(admin.ModelAdmin):
 
    raw_id_fields = (FK字段, M2M字段,)

1.9.12 fields,詳細頁面時,顯示字段的字段

@admin.register(models.UserInfo)
class UserAdmin(admin.ModelAdmin):
    fields = (user,)
1.9.13 exclude,詳細頁面時,排除的字段
@admin.register(models.UserInfo)
class UserAdmin(admin.ModelAdmin):
    exclude = (user,)
1.9.14 readonly_fields,詳細頁面時,只讀字段
@admin.register(models.UserInfo)
class UserAdmin(admin.ModelAdmin):
    readonly_fields = (user,)

1.9.15 fieldsets,詳細頁面時,使用fieldsets標簽對數據進行分割顯示

@admin.register(models.UserInfo)
class UserAdmin(admin.ModelAdmin):
    fieldsets = (
        (基本數據, {
            fields: (user, pwd, ctime,)
        }),
        (其他, {
            classes: (collapse, wide, extrapretty),  # ‘collapse‘,‘wide‘, ‘extrapretty‘
            fields: (user, pwd),
        }),
    )
1.9.16 細頁面時,M2M顯示時,數據移動選擇(方向:上下和左右)
@admin.register(models.UserInfo)
class UserAdmin(admin.ModelAdmin):
    filter_vertical = ("m2m字段",) # 或filter_horizontal = ("m2m字段",)

1.9.17 ordering,列表時,數據排序規則

@admin.register(models.UserInfo)
class UserAdmin(admin.ModelAdmin):
    ordering = (-id,)
    或
    def get_ordering(self, request):
        return [-id, ]
1.9.18 radio_fields,詳細頁面時,使用radio顯示選項(FK默認使用select)
radio_fields = {"ug": admin.VERTICAL} # 或admin.HORIZONTAL

1.9.19 form = ModelForm,用於定制用戶請求時候表單驗證

from app01 import models
from django.forms import ModelForm
from django.forms import fields
 
 
class MyForm(ModelForm):
    others = fields.CharField()
 
    class Meta:
        model = models = models.UserInfo
        fields = "__all__"
 
@admin.register(models.UserInfo)
class UserAdmin(admin.ModelAdmin):
 
    form = MyForm

1.9.20 empty_value_display = "列數據為空時,顯示默認值"

@admin.register(models.UserInfo)
class UserAdmin(admin.ModelAdmin):
    empty_value_display = "列數據為空時,默認顯示"
 
    list_display = (user,pwd,up)
 
    def up(self,obj):
        return obj.user
    up.empty_value_display = "指定列數據為空時,默認顯示"

2. admin 源碼解析


a

Django-CRM項目學習(一)-admin組件