Django中Admin站點總結


Admin站點

內容發布的部分由網站的管理員負責查看、添加、修改、刪除數據,開發這些重復的功能是一件單調乏味、缺乏創造力的工作,為此,Django能夠根據定義的模型類自動地生成管理模塊。

說明:案例以地區數據舉例

1)准備工作:創建管理員的用戶名和密碼。

python manage.py createsuperuser

按提示填寫用戶名、郵箱、密碼。

2)使用:在應用的admin.py中注冊模型類

例:打開booktest/admin.py文件,注冊地區模型。

from django.contrib import admin
from models import *

admin.site.register(AreaInfo)

3)輸入如下網址:

http://127.0.0.1:8000/admin/

按提示填寫用戶名、密碼,點擊“Log in”按鈕登錄

登錄成功后,可以看到AreaInfos,可以進行增加、修改、刪除、查詢的管理。

控制管理頁展示

類ModelAdmin可以控制模型在Admin界面中的展示方式,主要包括在列表頁的展示方式、添加修改頁的展示方式。

1)在booktest/admin.py中,注冊模型類前定義管理類AreaAdmin。

class AreaAdmin(admin.ModelAdmin):
    pass

管理類有兩種使用方式:

  • 注冊參數
  • 裝飾器

注冊參數:打開booktest/admin.py文件,注冊模型類代碼如下:

admin.site.register(AreaInfo,AreaAdmin)

裝飾器:打開booktest/admin.py文件,在管理類上注冊模型類,代碼如下:

@admin.register(AreaInfo)
class AreaAdmin(admin.ModelAdmin):
    pass 

列表頁選項

頁大小

每頁中顯示多少條數據,默認為每頁顯示100條數據,屬性如下:

list_per_page=100

1)打開booktest/admin.py文件,修改AreaAdmin類如下:

class AreaAdmin(admin.ModelAdmin):
    list_per_page = 10

"操作選項"的位置

頂部顯示的屬性,設置為True在頂部顯示,設置為False不在頂部顯示,默認為True。

actions_on_top=True

底部顯示的屬性,設置為True在底部顯示,設置為False不在底部顯示,默認為False。

actions_on_bottom=False

1)打開booktest/admin.py文件,修改AreaAdmin類如下:

class AreaAdmin(admin.ModelAdmin):
    ...
    actions_on_top = True
    actions_on_bottom = True

列表中的列

屬性如下:

list_display=[模型字段1,模型字段2,...]

1)打開booktest/admin.py文件,修改AreaAdmin類如下:

class AreaAdmin(admin.ModelAdmin):
    ...
    list_display = ['id','atitle']

點擊列頭可以進行升序或降序排列。

將方法作為列

列可以是模型字段,還可以是模型方法,要求方法有返回值。

1)打開booktest/models.py文件,修改AreaInfo類如下:

class AreaInfo(models.Model):
    ...
    def title(self):
        return self.atitle

2)打開booktest/admin.py文件,修改AreaAdmin類如下:

class AreaAdmin(admin.ModelAdmin):
    ...
    list_display = ['id','atitle','title'] 

方法列是不能排序的,如果需要排序需要為方法指定排序依據。(點擊列標題可排序)

admin_order_field=模型類字段

1)打開booktest/models.py文件,修改AreaInfo類如下:

class AreaInfo(models.Model):
    ...
    def title(self):
        return self.atitle
    title.admin_order_field='atitle'

列標題

列標題默認為屬性或方法的名稱,可以通過屬性設置。需要先將模型字段封裝成方法,再對方法使用這個屬性,模型字段不能直接使用這個屬性。

short_description='列標題'

1)打開booktest/models.py文件,修改AreaInfo類如下:

class AreaInfo(models.Model):
  def title(self):
  return self.atitle
  title.short_description='區域名稱'

關聯對象

無法直接訪問關聯對象的屬性或方法,可以在模型類中封裝方法,訪問關聯對象的成員。

1)打開booktest/models.py文件,修改AreaInfo類如下:

def parent(self):
    # 需要判斷是否有上級地區,省的上級地區為空
    if self.aparent:
        return self.aparent.atitle
    return 'None'

2)打開booktest/admin.py文件,修改AreaAdmin類如下:

class AreaAdmin(admin.ModelAdmin):
    ...
    list_display = ['id','atitle','title','parent']

右側欄過濾器

屬性如下,只能接收字段,會將對應字段的值列出來,用於快速過濾。一般用於有重復值的字段。

list_filter=[]

1)打開booktest/admin.py文件,修改AreaAdmin類如下:

class AreaAdmin(admin.ModelAdmin):
    ...
    list_filter=['atitle']

搜索框

屬性如下,用於對指定字段的值進行搜索,支持模糊查詢。列表類型,表示在這些字段上進行搜索。

search_fields=[]

1)打開booktest/admin.py文件,修改AreaAdmin類如下:

class AreaAdmin(admin.ModelAdmin):
    ...
    search_fields=['atitle']

中文標題

1)打開booktest/models.py文件,修改模型類,為屬性指定verbose_name參數,即第一個參數。

class AreaInfo(models.Model):
    atitle=models.CharField(verbose_name='標題',max_length=30)#名稱
    ...
  

編輯頁選項

顯示字段順序(通過以下的射值可以改變編輯頁順序顯示的順序)

屬性如下:

fields=[]

 

2)打開booktest/admin.py文件,修改AreaAdmin類如下:

class AreaAdmin(admin.ModelAdmin):
    ...
    fields=['aParent','atitle']

修改編輯頁對象的顯示名稱

在下拉列表中輸出的是對象的名稱,可以在模型類中定義str方法用於對象轉換字符串。

1)打開booktest/models.py文件,修改AreaInfo類,添加str方法。

class AreaInfo(models.Model):
    ...
    def __str__(self):
        return self.atitle.encode('utf-8')

分組顯示

注意:這項和fields只能出現一個,互斥的

屬性如下:

fieldset=(
    ('組1標題',{'fields':('字段1','字段2')}),
    ('組2標題',{'fields':('字段3','字段4')}),
)

1)打開booktest/admin.py文件,修改AreaAdmin類如下:

class AreaAdmin(admin.ModelAdmin):
    ...
    # fields=['aParent','atitle']
    fieldsets = (
        ('基本', {'fields': ['atitle']}),
        ('高級', {'fields': ['aParent']})
    )
說明:fields與fieldsets兩者選一使用。

關聯對象

在一對多的關系中,可以在一端的編輯頁面中編輯多端的對象,嵌入多端對象的方式包括表格、塊兩種。 類型InlineModelAdmin:表示在模型的編輯頁面嵌入關聯模型的編輯。子類TabularInline:以表格的形式嵌入。

子類StackedInline:以塊的形式嵌入。

1)打開booktest/admin.py文件,創建AreaStackedInline類。

class AreaStackedInline(admin.StackedInline):
    model = AreaInfo#關聯子對象
    extra = 2#額外編輯2個子對象

2)打開booktest/admin.py文件,修改AreaAdmin類如下:

class AreaAdmin(admin.ModelAdmin):
    ...
    inlines = [AreaStackedInline]

可以用表格的形式嵌入。

1)打開booktest/admin.py文件,創建AreaTabularInline類。

class AreaTabularInline(admin.TabularInline):
    model = AreaInfo#關聯子對象
    extra = 2#額外編輯2個子對象

2)打開booktest/admin.py文件,修改AreaAdmin類如下:

class AreaAdmin(admin.ModelAdmin):
    ...
    inlines = [AreaTabularInline]

重寫模板

1)在templates/目錄下創建admin目錄

2)打開當前虛擬環境中Django的目錄,再向下找到admin的模板,目錄如下:

/home/python/.virtualenvs/py_django/lib/python2.7/site-packages/django/contrib/admin/templates/admin

3)將需要更改文件拷貝到(在項目的templates文件夾里面創建admin文件夾)里,此處以base_site.html為例。

 

{% extends "admin/base.html" %}

{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}

{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>
<hr>
<h1>自定義的管理頁模板</h1>
<hr>
{% endblock %}

{% block nav-global %}{% endblock %}
編輯base_site.html文件Code

4)即可看到效果

其它后台的模板可以按照相同的方式進行修改。

上傳圖片

創建包含圖片的模型類

將模型類的屬性定義成models.ImageField類型。

1)打開booktest/models.py文件,定義模型類PicTest。

class PicTest(models.Model):
    pic = models.ImageField(upload_to='booktest/')

2)回到命令行中,生成遷移。

python manage.py makemigrations

3)回到命令行中,執行遷移。

python manage.py migrate

4)打開test5/settings.py文件,設置圖片保存路徑。因為圖片也屬於靜態文件,所以保存到static目錄下。

MEDIA_ROOT=os.path.join(BASE_DIR,"static/media")

5)在static目錄下創建media目錄,再創建應用名稱的目錄,此例為booktest

在管理頁面admin中上傳圖片

1)打開booktest/admin.py文件,注冊PicTest。

from django.contrib import admin
from models import *

admin.site.register(PicTest)

2)運行服務器,輸入如下網址。

http://127.0.0.1:8000/admin/

3)點擊“Add”添加數據,打開新頁面。

4)選擇圖片,點擊“save”按鈕完成圖片上傳。
5)回到數據庫命令行,查詢即可
6)圖片被保存到目錄static/media/booktest/下


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM