Django:admin界面的顯示優(yōu)化—Kapitel Zw?lfte

I考抄、Admin界面顯示優(yōu)化

Ein.內(nèi)置優(yōu)化
由于用戶表比較特殊,為系統(tǒng)中存在的,Django內(nèi)置了一個UserAdmin對顯示用戶信息做了優(yōu)化
我們在apps/users/admin.py內(nèi)重寫所有代碼

# 導(dǎo)入UserAdmin
from django.contrib.auth.admin import UserAdmin
from django.contrib import admin
from apps.users.models import UserProfile

admin.site.register(UserProfile, UserAdmin)

啟動項目,進入http://127.0.0.1:8000/admin/ 觀察用戶信息界面的變化

Zwei.利用Xadmin優(yōu)化
a.安裝xadmin
接下來我們使用xadmin對用戶信息界面進行優(yōu)化(對應(yīng)的Django2.2版本的xadmin,注:不同版本的Django需要在Github上下載對應(yīng)版本的xadmin)下載鏈接 (百度云提取碼:6fm7)

首先我們打開將xadmin下載并解壓后粘貼到項目根目錄內(nèi)韩玩,然后打開xadmin/xadmin的配置.txt閱讀內(nèi)容

1. 下載xadmin源碼
2. 在settings的INSTALLED_APPS中添加
    crispy_forms 和 xadmin
3. 安裝xadmin的依賴包
4. 通過migrate生成xadmin需要的表

我們按步驟進行,由于我們已經(jīng)完成了下載陆馁,所以進行第二步找颓,打開settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'apps.users.apps.MxOnlineConfig',
    'apps.courses.apps.CoursesConfig',
    'crispy_forms',
    # 注冊xadmin
    'xadmin',
]

按照第三步,我們打開xadmin/requirements.txt叮贩,利用pip install -r requirements.txt進行安裝依賴(一個個安裝也沒有問題)击狮。
注意當(dāng)前我們使用的python版本為3.7。
按照第四步益老,我們進行數(shù)據(jù)遷移打開manage.py Task

migrate xadmin

此時可能會報錯內(nèi)容為:ImportError: No module named ‘DjangoUeditor’彪蓬,我們安裝DjangoUeditor包,重新migrate捺萌,繼續(xù)報錯ImportError: No module named ‘widgets’档冬,這是由于DjangoUeditor對python3的支持存在問題,我們需下載一個新的DjangoUeditor下載鏈接(百度云提取碼:ju2n)桃纯,解壓新下載的DjangoUeditor酷誓,復(fù)制該文件夾,找到自己虛擬環(huán)境的創(chuàng)建的位置我的為E:\PythonVenv\py_mxonline\Lib\site-packages慈参,粘貼進該文件夾呛牲,并替換重復(fù)文件即可解決問題。(這是其中一種常見錯誤驮配,其余錯誤請自行搜索解決)

解決該問題后我們重新migrate xadmin(不需要makemigrations的原因是xadmin內(nèi)已經(jīng)生成完遷移文件了。)

之后在MxOnline/urls.py內(nèi)給xadmin分配url

# 導(dǎo)入xadmin
import xadmin
# 在urlpatterns內(nèi)添加
path('xadmin/', xadmin.site.urls),

這里介紹一種問題的解決辦法
問題:已經(jīng)遷移過數(shù)據(jù),重新遷移時無法刷新表或在遷移內(nèi)有錯需要重新對部分應(yīng)用進行遷移

解決辦法:
1.打開對應(yīng)數(shù)據(jù)庫壮锻,刪除django_migrations表以及需要重新遷移生成的表琐旁。
2.刪除對應(yīng)應(yīng)用已存在的遷移文件
3.打開manage.py Task 輸入 migrate --fake(該語句會生成并刷新django_migrations表)
4.對需要重新遷移的應(yīng)用進行makemigrations [appname] 后直接 migrate [appname] 即可

b.應(yīng)用xadmin
這里以courses應(yīng)用舉例說明如何應(yīng)用,請讀者根據(jù)文末提示自行完成organizations應(yīng)用的xadmin優(yōu)化

首先打開apps/courses/models.py猜绣,我們先編寫模型:

from django.db import models
from apps.users.models import BaseModel


# Create your models here.

class Course(BaseModel):
    name = models.CharField(verbose_name="課程名", max_length=50)
    desc = models.CharField(verbose_name="課程描述", max_length=300)
    learn_times = models.IntegerField(default=0, verbose_name="學(xué)習(xí)時長/min")
    degree = models.CharField(verbose_name="課程難度",
                              choices=(('primary', '初級'), ('intermediate', '中級'), ('advanced', '高級')), max_length=20)
    students = models.IntegerField(verbose_name="學(xué)習(xí)人數(shù)", default=0)
    fav_nums = models.IntegerField(verbose_name="收藏人數(shù)", default=0)
    click_nums = models.IntegerField(verbose_name="點擊量", default=0)
    notice = models.CharField(verbose_name="課程公告", max_length=300, default="")
    category = models.CharField(verbose_name="課程類別", max_length=20, default="后端開發(fā)")
    tag = models.CharField(verbose_name="標(biāo)簽", max_length=10, default="")
    course_notes = models.CharField(verbose_name="課程須知", max_length=300, default="")
    teacher_notice = models.CharField(verbose_name="教師通告", max_length=300, default="")
    is_classic = models.BooleanField(default=False, verbose_name="是否經(jīng)典")
    is_banner = models.BooleanField(default=False, verbose_name="是否廣告位")
    course_image = models.ImageField(upload_to="courses/%Y/%m", verbose_name="封面", max_length=100)

    class Meta:
        verbose_name = "課程信息"
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name


class Lesson(BaseModel):
    # on_delete 表示對應(yīng)的外鍵數(shù)據(jù)被刪除后當(dāng)前數(shù)據(jù)如何執(zhí)行
    course = models.ForeignKey(Course, verbose_name="課程", on_delete=models.CASCADE)
    chapter_name = models.CharField(verbose_name="章節(jié)名", max_length=100)
    learn_times = models.IntegerField(default=0, verbose_name="學(xué)習(xí)時長/min")

    class Meta:
        verbose_name = "課程章節(jié)"
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.chapter_name


class Video(BaseModel):
    lesson = models.ForeignKey(Lesson, verbose_name="章節(jié)", on_delete=models.CASCADE)
    video_name = models.CharField(max_length=100, verbose_name="視頻名稱")
    learn_times = models.IntegerField(default=0, verbose_name="學(xué)習(xí)時長/min")
    url = models.CharField(max_length=1000, verbose_name="訪問地址")

    class Meta:
        verbose_name = "課程章節(jié)"
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.video_name


class CourseResource(BaseModel):
    course = models.ForeignKey(Course, verbose_name="課程", on_delete=models.CASCADE)
    resource_name = models.CharField(max_length=100, verbose_name="名稱")
    file_url = models.FileField(max_length=200, verbose_name="下載地址", upload_to="courses/resourse%Y/%m")

    class Meta:
        verbose_name = "課程資源"
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.resource_name

然后灰殴,對courses應(yīng)用進行數(shù)據(jù)遷移
遷移完成后,在apps/courses文件夾下新建一個名為adminx.py的文件(注:文件名不可變)掰邢,編寫顯示邏輯

import xadmin
from apps.courses.models import Course

# Register your models here.
# 無需繼承admin.ModelAdmin
class CourseAdmin(object):
    # 顯示字段
    list_display = ["id", "name", "desc", "learn_times", "degree"]
    # 搜索字段
    search_fields = ["name"]
    # 過濾器
    list_filter = ["id", "name", "desc", "learn_times", "degree"]

xadmin.site.register(Course, CourseAdmin)

補充apps/courses/apps.py內(nèi)容

from django.apps import AppConfig

class CoursesConfig(AppConfig):
    name = 'apps.courses'
    # 補充的代碼牺陶,為了顯示的直觀
    verbose_name = "課程管理"

然后我們運行項目,在http://127.0.0.1:8000/xadmin/ 內(nèi)打開xadmin頁面

界面預(yù)覽

點擊課程信息辣之,我們可以添加課程


II掰伸、實現(xiàn)organizations應(yīng)用的xadmin顯示優(yōu)化的若干提示

下面是organizations應(yīng)用models內(nèi)容的相應(yīng)提示,請按照下列類以及屬性提示編寫model層

Class Attributes(verbose_name) Remarks
City --- Meta:城市信息
^ 城市名
^ 城市描述 ---
CourseOrg --- Meta:機構(gòu)信息
^ 機構(gòu)名稱 ---
^ 機構(gòu)標(biāo)簽 ---
^ 機構(gòu)類別 用choice實現(xiàn)類別:個人怀估,高校狮鸭,培訓(xùn)機構(gòu)三個選項
^ 點擊量 ---
^ 收藏人數(shù) ---
^ logo 圖片的加載路徑"org/%Y/%m"
^ 機構(gòu)地址 ---
^ 學(xué)習(xí)人數(shù) ---
^ 課程數(shù) ---
^ 是否認(rèn)證 ---
^ 是否金牌 ---
^ 所在城市 需要外鍵關(guān)聯(lián)City類
Teacher --- Meta:教師信息
^ 用戶 一對一關(guān)聯(lián)UserProfile
^ 所屬機構(gòu) 外鍵關(guān)聯(lián)CourseOrg
^ 教師名 ---
^ 工作年限 ---
^ 就職公司 ---
^ 公司職位 ---
^ 教學(xué)特點 ---
^ 收藏人數(shù) ---
^ 點擊量 ---
^ 年齡 ---
^ 頭像 圖片的加載路徑"teacher/%Y/%m"

以及對于運行結(jié)果的示例如下:

運行結(jié)果

為了完成下列顯示,我們也需要編寫對應(yīng)的apps.py和adminx.py來完成顯示
在此之前多搀,我們需要完備的熟悉courses示例

該項目已在github基本完成大體內(nèi)容歧蕉,還有些細(xì)枝末節(jié)的內(nèi)容未實現(xiàn),以及由于時間原因康铭,django的筆記暫停更新惯退,之后會整理后進行接續(xù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市从藤,隨后出現(xiàn)的幾起案子催跪,更是在濱河造成了極大的恐慌,老刑警劉巖呛哟,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叠荠,死亡現(xiàn)場離奇詭異,居然都是意外死亡扫责,警方通過查閱死者的電腦和手機榛鼎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鳖孤,“玉大人者娱,你說我怎么就攤上這事∷沾В” “怎么了黄鳍?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長平匈。 經(jīng)常有香客問我框沟,道長藏古,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任忍燥,我火速辦了婚禮拧晕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘梅垄。我一直安慰自己厂捞,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布队丝。 她就那樣靜靜地躺著靡馁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪机久。 梳的紋絲不亂的頭發(fā)上臭墨,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機與錄音吞加,去河邊找鬼裙犹。 笑死,一個胖子當(dāng)著我的面吹牛衔憨,可吹牛的內(nèi)容都是我干的叶圃。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼践图,長吁一口氣:“原來是場噩夢啊……” “哼掺冠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起码党,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤德崭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后揖盘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體眉厨,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年兽狭,在試婚紗的時候發(fā)現(xiàn)自己被綠了憾股。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡箕慧,死狀恐怖服球,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情颠焦,我是刑警寧澤斩熊,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站伐庭,受9級特大地震影響粉渠,放射性物質(zhì)發(fā)生泄漏分冈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一渣叛、第九天 我趴在偏房一處隱蔽的房頂上張望丈秩。 院中可真熱鬧盯捌,春花似錦淳衙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至幼衰,卻和暖如春靴跛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背渡嚣。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工梢睛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人识椰。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓绝葡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親腹鹉。 傳聞我的和親對象是個殘疾皇子藏畅,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容