99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Django Tutorial Part 4: Django admin site

2018-05-15 17:26 更新
先決條件: 首先完成: Django教程第3部分:使用模型。
目的: 了解Django管理網(wǎng)站的優(yōu)點(diǎn)和局限性,并使用它為我們的模型創(chuàng)建一些記錄。

概述

Django admin 應(yīng)用程式 可以使用您的模型自動(dòng)建立一個(gè)網(wǎng)站區(qū)域,您可以用來建立,查看,更新和刪除記錄。 這可以在開發(fā)過程中節(jié)省大量時(shí)間,使您可以輕松地測(cè)試模型,并了解是否擁有正確的數(shù)據(jù)。 管理應(yīng)用程序還可用于在生產(chǎn)中管理數(shù)據(jù),具體取決于網(wǎng)站的類型。 Django項(xiàng)目?jī)H推薦它用于內(nèi)部數(shù)據(jù)管理(即僅供管理員或組織內(nèi)部人員使用),因?yàn)橐阅P蜑橹行牡姆椒ú灰欢ㄊ撬杏脩糇詈玫慕缑?,并且暴露了大量不必要的?xì)節(jié) 關(guān)于模型。

當(dāng)您創(chuàng)建骨架項(xiàng)目(有關(guān)所需的實(shí)際依賴關(guān)系的信息,請(qǐng)參閱 class ="external"> Django docs here )。 因此,您必須向管理應(yīng)用程序添加模型的所有操作都是注冊(cè) 在本文末尾,我們將簡(jiǎn)要說明如何進(jìn)一步配置管理區(qū)域以更好地顯示我們的模型數(shù)據(jù)。

注冊(cè)模型后,我們將展示如何創(chuàng)建一個(gè)新的"超級(jí)用戶",登錄到網(wǎng)站,并創(chuàng)建一些書籍,作者,書籍實(shí)例和類型。 這些將有助于測(cè)試我們將在下一教程中開始創(chuàng)建的視圖和模板。

注冊(cè)模型

首先,在目錄應(yīng)用程序( /locallibrary/catalog/admin.py )中打開 admin.py 它目前看起來像這樣 - 注意它已經(jīng)導(dǎo)入 django.contrib.admin :

from django.contrib import admin

# Register your models here.

通過將以下文本復(fù)制到文件底部來注冊(cè)模型。 此代碼只是導(dǎo)入模型,然后調(diào)用 admin.site.register 來注冊(cè)它們。

from .models import Author, Genre, Book, BookInstance

admin.site.register(Book)
admin.site.register(Author)
admin.site.register(Genre)
admin.site.register(BookInstance)
Note: If you accepted the challenge to create?a model to represent the natural language of a book (see the models tutorial article), import and register it too!

這是向站點(diǎn)注冊(cè)模型或模型的最簡(jiǎn)單方法。 管理網(wǎng)站是高度可自定義的,我們將更多地討論注冊(cè)您的模型的其他方法。

創(chuàng)建超級(jí)用戶

為了登錄管理網(wǎng)站,我們需要一個(gè)啟用了職員狀態(tài)的用戶帳戶。 為了查看和創(chuàng)建記錄,我們還需要此用戶具有管理所有對(duì)象的權(quán)限。 您可以使用 manage.py 創(chuàng)建一個(gè)"超級(jí)用戶"帳戶,該帳戶具有對(duì)該網(wǎng)站的完全訪問權(quán)限和所有需要的權(quán)限。

調(diào)用與 manage.py 相同目錄中的以下命令,以創(chuàng)建超級(jí)用戶。 系統(tǒng)將提示您輸入用戶名,電子郵件地址和 strong 密碼。

python3 manage.py createsuperuser

一旦此命令完成,新的超級(jí)用戶將被添加到數(shù)據(jù)庫。 現(xiàn)在重新啟動(dòng)開發(fā)服務(wù)器,以便我們可以測(cè)試登錄:

python3 manage.py runserver

登錄和使用網(wǎng)站

要登錄網(wǎng)站,請(qǐng)打開 / admin 網(wǎng)址(例如 http://127.0。 0.1:8000 / admin ),然后輸入新的超級(jí)用戶用戶ID和密碼憑據(jù)(您將被重定向到登錄頁面,然后返回 / admin >輸入您的詳細(xì)信息后的網(wǎng)址)。

這部分網(wǎng)站顯示所有我們的模型,按已安裝的應(yīng)用程序分組。 您可以單擊模型名稱轉(zhuǎn)到列出其所有關(guān)聯(lián)記錄的屏幕,然后可以進(jìn)一步單擊這些記錄以進(jìn)行編輯。 您也可以直接點(diǎn)擊每個(gè)模型旁邊的添加鏈接,開始創(chuàng)建該類型的記錄。

點(diǎn)擊圖書右側(cè)的添加鏈接,創(chuàng)建一本新書(這將顯示一個(gè)類似下面的對(duì)話框)。 請(qǐng)注意每個(gè)字段的標(biāo)題,所使用的窗口小部件的類型以及 help_text (如果有)與您在模型中指定的值是否匹配。

輸入字段的值。 您可以按相應(yīng)字段旁邊的 + 按鈕創(chuàng)建新作者或類型(如果您已經(jīng)創(chuàng)建了新作者,則可以從列表中選擇現(xiàn)有值)。 完成后,您可以按保存保存并添加其他保存并繼續(xù)編輯來保存記錄。

; width:841px;">

注意:此時(shí),我們希望您花點(diǎn)時(shí)間將一些書籍,作者和類型(例如幻想)添加到您的應(yīng)用程序中。 確保每個(gè)作者和類型包括幾個(gè)不同的書(這將使您的列表和詳細(xì)視圖更有趣,當(dāng)我們以后在文章系列中實(shí)施)。

添加完書籍后,點(diǎn)擊頂部書簽中的首頁鏈接即可返回主管理頁面。 然后點(diǎn)擊圖書鏈接以顯示當(dāng)前圖書列表(或通過其他鏈接查看其他模型列表)。 現(xiàn)在您已添加了幾本書,該列表可能與下面的屏幕截圖類似。 顯示每本書的標(biāo)題; 這是我們?cè)谏弦黄恼轮兄付ǖ腂ook模型的 __ str __()方法中返回的值。

; width:1000px;">

從此列表中,您可以通過選中不需要的圖書旁邊的復(fù)選框,從操作下拉列表中選擇 delete ... 然后按開始按鈕。 您也可以按添加書按鈕添加新書。

您可以通過在鏈接中選擇其名稱來編輯圖書。 圖書的編輯頁面(如下所示)幾乎與"添加"頁面完全相同。 主要區(qū)別是網(wǎng)頁標(biāo)題(更改圖書)以及添加刪除, HISTORY 查看位置 按鈕(最后一個(gè)按鈕出現(xiàn),因?yàn)槲覀冊(cè)谀P椭卸x了 get_absolute_url()方法)。

; width:841px;">

現(xiàn)在返回首頁頁面(使用首頁鏈接面包屑鏈接),然后查看作者流派 >列表 - 您應(yīng)該已經(jīng)從添加新書時(shí)創(chuàng)建了很多,但隨時(shí)可以添加一些。

您不會(huì)擁有的任何圖書實(shí)例,因?yàn)檫@些不是從圖書創(chuàng)建的(雖然您可以從 BookInstance 創(chuàng)建圖書 這是 ForeignKey 字段的性質(zhì))。 返回首頁頁面,然后按相關(guān)聯(lián)的添加按鈕,在下面顯示添加圖書實(shí)例屏幕。 請(qǐng)注意大的,全局唯一的ID,它可以用于單獨(dú)標(biāo)識(shí)庫中的一本圖書的單個(gè)副本。

; width:863px;">

為每本圖書創(chuàng)建一些記錄。 將狀態(tài)設(shè)置為至少一些記錄的可用,以及其他人的貸款。 如果狀態(tài)為 可用,則還要設(shè)置未來的到期日期日期。

而已! 您現(xiàn)在已經(jīng)學(xué)會(huì)了如何設(shè)置和使用管理站點(diǎn)。 您還創(chuàng)建了 Book , BookInstance , Genre 作者的記錄, 使用一旦我們創(chuàng)建自己的視圖和模板。

高級(jí)配置

Django使用注冊(cè)模型中的信息創(chuàng)建一個(gè)基本的管理網(wǎng)站做得很好:

  • Each?model has a list of?individual records, identified by?the?string created with the?model's?__str__()?method,?and linked to detail views/forms?for editing. By default, this view has an action menu up the top that you can use to perform bulk delete operations on records.
  • The model detail record forms for editing and adding records?contain?all the fields in the model, laid out vertically in?their declaration order. ?

您可以進(jìn)一步自定義界面,使其更易于使用。 您可以做的一些事情是:

  • List views:?
    • Add additional fields/information displayed for each record.?
    • Add filters to select which records are listed, based on date or some other selection value (e.g. Book loan status).
    • Add additional options to the actions menu in list views and choose where this menu is displayed on the form.
  • Detail views
    • Choose which fields to display (or exclude), along with their order, grouping,?whether they are editable, the widget used, orientation etc.
    • Add related fields to a record to allow inline editing (e.g. add the ability to add and edit book records while you're creating their?author record).

在本節(jié)中,我們將介紹一些改進(jìn),以改進(jìn)我們的 LocalLibrary 接口,包括向 Book Author 添加更多信息 >模型列表,并改進(jìn)其編輯視圖的布局。 我們不會(huì)改變 Language Genre 模型表示,因?yàn)樗鼈兠總€(gè)只有一個(gè)字段,所以沒有真正的好處!

您可以在 Django管理網(wǎng)站中找到所有管理網(wǎng)站自定義選項(xiàng)的完整參考 (Django文檔)。

注冊(cè)ModelAdmin類

要更改模型在管理界面中的顯示方式,請(qǐng)定義 ModelAdmin 類(描述布局)并將其注冊(cè)到模型。

讓我們從作者模型開始。 在目錄應(yīng)用程序中打開 admin.py ( /locallibrary/catalog/admin.py )。 注釋作者模型的原始注冊(cè)(前綴為#):

# admin.site.register(Author)

現(xiàn)在添加一個(gè)新的 AuthorAdmin 和注冊(cè)如下所示。

# Define the admin class
class AuthorAdmin(admin.ModelAdmin):
    pass

# Register the admin class with the associated model
admin.site.register(Author, AuthorAdmin)

現(xiàn)在我們?yōu)?code> Book 和 BookInstance 添加 ModelAdmin 類。 我們?cè)俅涡枰⑨屧甲?cè):

#admin.site.register(Book)
#admin.site.register(BookInstance)

現(xiàn)在創(chuàng)建和注冊(cè)新模型; 為了這個(gè)演示的目的,我們將使用 @register 裝飾器來注冊(cè)模型(這與 admin.site.register() 句法):

# Register the Admin classes for Book using the decorator

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
    pass

# Register the Admin classes for BookInstance using the decorator

@admin.register(BookInstance) 
class BookInstanceAdmin(admin.ModelAdmin):
    pass

目前所有的管理類都是空的(見" pass"),所以管理行為將保持不變! 我們現(xiàn)在可以擴(kuò)展這些定義我們的特定于模型的管理行為。

配置列表視圖

LocalLibrary 目前列出使用從 __ str __()方法生成的對(duì)象名稱的所有作者。 這是很好,當(dāng)你只有幾個(gè)作者,但一旦你有很多,你可能最終有重復(fù)。 要區(qū)分它們,或者因?yàn)槟胍@示每個(gè)作者的更有趣的信息,您可以使用 .admin.ModelAdmin.list_display"class ="external"> list_display 向視圖添加其他字段。

AuthorAdmin 類替換為以下代碼。 要顯示在列表中的字段名稱以所需順序在元組中聲明,如圖所示(這些是與原始模型中指定的名稱相同的名稱)。

class AuthorAdmin(admin.ModelAdmin):
    list_display = ('last_name', 'first_name', 'date_of_birth', 'date_of_death')

重新啟動(dòng)網(wǎng)站并導(dǎo)航到作者列表。 現(xiàn)在應(yīng)該顯示上面的字段,如下所示:

; width:941px;">

對(duì)于我們的 Book 模型,我們還會(huì)顯示作者 genre 作者是一個(gè) ForeignKey 字段(一對(duì)一)關(guān)系,因此將由 __ str()__ 關(guān)聯(lián)記錄。 BookAdmin 類替換為以下版本。

@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
    list_display = ('title', 'author', 'display_genre')

不幸的是,我們不能直接在 list_display 中指定 genre ManyToManyField (Django阻止這一點(diǎn),因?yàn)樵谶@樣做會(huì)有一個(gè)大的數(shù)據(jù)庫訪問"成本")。 相反,我們將定義一個(gè) display_genre 函數(shù)來獲取信息作為字符串(這是我們上面調(diào)用的函數(shù);我們將在下面定義它)。

注意:由于數(shù)據(jù)庫操作的"成本",在此處獲取 genre 可能不是一個(gè)好主意。 我們向您展示了如何調(diào)用模型中的函數(shù),因?yàn)槠渌蚍浅S杏?- 例如,在列表中的每個(gè)項(xiàng)目旁邊添加一個(gè)刪除鏈接。

將以下代碼添加到您的 Book 模型( models.py )中。 這將從 genre 字段的前三個(gè)值(如果它們存在)創(chuàng)建一個(gè)字符串,并創(chuàng)建一個(gè)可以在管理站點(diǎn)中用于此方法的 short_description 。

    def display_genre(self):
        """
        Creates a string for the Genre. This is required to display genre in Admin.
        """
        return ', '.join([ genre.name for genre in self.genre.all()[:3] ])
display_genre.short_description = 'Genre'    

保存模型并更新管理員后,請(qǐng)重新啟動(dòng)網(wǎng)站并轉(zhuǎn)到圖書列表頁面; 您應(yīng)該會(huì)看到一個(gè)類似下面的圖書列表:

; width:947px;">

Genre 模型(和 Language 模型,如果您定義了一個(gè))都有一個(gè)字段,因此沒有必要?jiǎng)?chuàng)建一個(gè)額外的模型來顯示其他字段。

注意:值得更新 BookInstance 模型列表,以至少顯示狀態(tài)和預(yù)期的返回日期。 我們已經(jīng)補(bǔ)充說,作為本文末尾的一個(gè)挑戰(zhàn)!

添加列表過濾器

一旦列表中有很多項(xiàng)目,可以過濾顯示的項(xiàng)目是非常有用的。 這是通過列出 list_filter 屬性中的字段來完成的。 將以下代碼段替換為當(dāng)前的 BookInstanceAdmin 類。

@admin.register(BookInstance)
class BookInstanceAdmin(admin.ModelAdmin):
    list_filter = ('status', 'due_back')

列表視圖現(xiàn)在將在右側(cè)包含一個(gè)過濾器框。 請(qǐng)注意如何選擇日期和狀態(tài)來過濾值:

整理詳細(xì)視圖布局

默認(rèn)情況下,詳細(xì)視圖按照模型中聲明的順序垂直布置所有字段。 您可以更改聲明的順序,顯示(或排除)字段,是否用于組織信息,是否水平或垂直顯示字段,甚至在管理表單中使用哪些編輯窗口小部件。

注意: LocalLibrary 模型相對(duì)簡(jiǎn)單,因此我們不需要更改布局; 我們會(huì)做一些改變,但是,只是為了告訴你如何。

Controlling which fields are displayed and laid out

更新您的 AuthorAdmin 類以添加字段行,如下所示(以粗體顯示):

class AuthorAdmin(admin.ModelAdmin):
    list_display = ('last_name', 'first_name', 'date_of_birth', 'date_of_death')
    fields = ['first_name', 'last_name', ('date_of_birth', 'date_of_death')]

字段屬性僅列出將按順序顯示在表單上的字段。 默認(rèn)情況下垂直顯示字段,但如果您進(jìn)一步將它們分組為一個(gè)元組,則會(huì)水平顯示(如上面的"日期"字段所示)。

重新啟動(dòng)應(yīng)用程序并轉(zhuǎn)到作者詳細(xì)信息視圖 - 它現(xiàn)在應(yīng)該如下所示:

; width:928px;">

注意:您也可以使用 exclude 屬性來聲明要從表單中排除的屬性列表(將顯示模型中的所有其他屬性)。

Sectioning the detail view

您可以使用 ModelAdmin.fieldsets"class ="external"> fieldsets 屬性。

BookInstance 模型中,我們有與該書的內(nèi)容相關(guān)的信息(即 name , imprint id ) 以及何時(shí)可用( status , due_back )。 我們可以通過將粗體文本添加到我們的 BookInstanceAdmin 類中來將它們添加到不同的部分。

@admin.register(BookInstance)
class BookInstanceAdmin(admin.ModelAdmin):
    list_filter = ('status', 'due_back')
    
    fieldsets = (
        (None, {
            'fields': ('book','imprint', 'id')
        }),
        ('Availability', {
            'fields': ('status', 'due_back')
        }),
    )

每個(gè)部分都有自己的標(biāo)題(或,如果你不想要一個(gè)標(biāo)題)和字典中相關(guān)的元組字段 - 該格式很復(fù)雜,但很容易理解,如果你 看看上面的代碼片段。

重新啟動(dòng)并導(dǎo)航到書實(shí)例視圖; 表單應(yīng)該如下所示:

; width:947px;">

內(nèi)聯(lián)編輯關(guān)聯(lián)記錄

有時(shí),可以同時(shí)添加關(guān)聯(lián)記錄是有意義的。 例如,您可以在同一個(gè)詳細(xì)信息頁面上同時(shí)獲取圖書信息和有關(guān)特定副本的信息。

您可以通過聲明內(nèi)聯(lián) / a>,類型為 TabularInline >(水平布局)或 StackedInline >(垂直布局,就像默認(rèn)的模型布局)。 您可以在 Book 詳細(xì)信息中添加 BookInstance 信息,方法是在 BookAdmin

class BooksInstanceInline(admin.TabularInline):
? ? model = BookInstance

class BookAdmin(admin.ModelAdmin):
? ? list_display = ('title', 'author', 'display_genre')
? ? inlines = [BooksInstanceInline]

嘗試重新啟動(dòng)您的應(yīng)用程序,然后查看一本書的視圖 - 在底部,您現(xiàn)在應(yīng)該看到與這本書有關(guān)的書實(shí)例:

; width:937px;">

在這種情況下,我們所做的就是聲明tablular內(nèi)聯(lián)類,它只是添加了內(nèi)聯(lián)模型中的所有字段。 您可以指定布局的所有其他附加信息,包括要顯示的字段,它們的順序,它們是否是只讀的等。(參見 dev / ref / contrib / admin /#django.contrib.admin.TabularInline"class ="external"> TabularInline 了解更多信息)。

注意:此功能有一些痛苦的限制! 在上面的截圖中,我們有三個(gè)現(xiàn)有的書實(shí)例,其次是三個(gè)占位符為新的書實(shí)例(看起來非常相似!)。 默認(rèn)情況下最好沒有備用圖書實(shí)例,只需使用添加其他圖書實(shí)例鏈接添加它們,或者只需將 BookInstance 列為非 可讀鏈接,但不支持這兩個(gè)選項(xiàng)。

挑戰(zhàn)自己

我們?cè)诒竟?jié)中學(xué)到了很多,所以現(xiàn)在是時(shí)候嘗試幾個(gè)東西。

  1. For the?BookInstance list view, add code to display the?book, status, due?back date, and id (rather than the default __str__() text).
  2. Add an inline listing of Book items?to the Author detail view using the same approach as we did for Book/BookInstance.

    概要

    而已! 您現(xiàn)在已經(jīng)學(xué)習(xí)了如何以最簡(jiǎn)單和改進(jìn)的形式設(shè)置管理站點(diǎn),如何創(chuàng)建超級(jí)用戶以及如何瀏覽管理站點(diǎn)以及查看,刪除和更新記錄。 一路上,你創(chuàng)建了一堆書,BookInstances,類型和作者,我們將能夠列出和顯示一旦我們創(chuàng)建自己的視圖和模板。

    進(jìn)一步閱讀

    以上內(nèi)容是否對(duì)您有幫助:
    在線筆記
    App下載
    App下載

    掃描二維碼

    下載編程獅App

    公眾號(hào)
    微信公眾號(hào)

    編程獅公眾號(hào)