默認登陸地址:http://127.0.0.1:8000/adminpython
建立後臺管理員:數據庫
python3 ./manage.py createsuperuser # 回車後輸入如下內容django
Username:輸入用戶名spa
Email Address:電子郵箱code
Password:密碼
Password(again):重複密碼對象
一、在應用中的admin.py中註冊要管理的實體類(models.py中的類)blog
from django.contrib import admin from .models import * # 註冊CartInfo和Order兩個實體類 admin.site.register(CartInfo) admin.site.register(Order)
二、修改models.py,來改變後臺內容的顯示排序
1). models.py中爲各個類(實體類)追加一個方法。繼承
def __str__(self): return self.屬性名
2). 經過Models類的內部類Meta定義每一個類的展示形式get
class Author(models.Model): ... ...# 定義對象在後臺的展示形式 def __str__(self): return self.names # 聲明內部類,定義當前類在管理頁面中的展示形式 class Meta: # 1.修改當前表名爲author(須要同步到數據庫) db_table = 'author' # 下面兩個只與後臺有關係 # 2.修改實體類在後臺管理頁中的名稱(單數) verbose_name = '做者' # 3.修改實體類在後臺管理頁中的名稱(複數) verbose_name_plural = verbose_name # 4.先按照年齡降序排序,再按照ID升序排序 ordering = ['-age', 'id']
一、在admin.py中建立高級管理類並註冊
# 定義Author高級管理類 # 類名:實體類名+Admin,必須繼承admin.ModelAdmin class AuthorAdmin(admin.ModelAdmin): pass # 註冊高級管理類 admin.site.register(Author, AuthorAdmin)
二、定製高級管理信息
# 定義Author高級管理類 class AuthorAdmin(admin.ModelAdmin): # list_display:指定在列表頁中可以顯示的字段 # 取值:由屬性名稱組成的元組或列表 list_display = ['names', 'age', 'email'] # list_display_links:定義列表頁中能連接到詳情頁的字段 # 取值:由屬性名稱組成的元組或列表(必須存在與list_display中) list_display_links = ['names', 'email'] # list_editable:指定在列表頁中容許被編輯的字段 # 取值:由屬性名稱組成的元組或列表 # 不能出如今list_display_links, 可是必須在list_display中 list_editable = ['age'] # search_fields:添加容許被搜索的字段 # 取值:由屬性名稱組成的元組或列表 search_fields = ['names', 'email'] # list_filter:在列表的右側增長過濾器,實現快速篩選 list_filter = ['names', 'email'] # fields:指定詳情頁顯示的字段以及排列的順序 # 取值:由屬性名稱組成的元組或列表 fields = ['email', 'names', 'age', 'isActive'] # date_hierarchy:在列表頁的頂端增長一個時間選擇器 # 取值必須是DateField或DateTimeField的值 date_hierarchy = 'publicate' # fieldsets:在詳情頁中,對字段進行分組顯示(不能同時與fields存在) fieldsets = [ # 分組1 ( '基本信息', { 'fields': ('names', 'email') } ), # 分組2 ( '可選信息', { 'fields': ('age', 'isActive'), 'classes': ('collapse',), } ) ]
一對一表示,A表中的一條記錄只能與B表中的一條記錄相關聯。
數據庫中實現方式:
A表:設置主鍵
B表:增長一列(字段),並引用自A表的主鍵,而且得增長惟一約束
一、在Django中的實現方式:
在要相關聯的兩個實體類中的任意一箇中增長:
屬性(字段)名 = models.OneToOneField(要關聯的實體類名)
二、關聯查詢
# 在Wife類中新增一個字段一對一關聯Author類 class Wife(models.Model): ... author=models.OneToOneField(Author)
# 正向查詢:經過wife 找 author # 1.獲取 id 爲1 的 Wife的信息 wife = Wife.objects.get(id=1) # 2.經過 Wife 的關聯屬性 author 來找Author author = wife.author # 反向查詢:經過author 找 wife # 1.獲取 id 爲14 的 Author的信息 author = Author.objects.get(id=14) # 2.經過 author 的關聯屬性 wife 來找wife
# wife是Django經過OneToOneField在Author(被關聯表)中默認增長的一個隱式屬性 wife = author.wife
一對多表示,A表中的一條記錄能與B表中的多條記錄相關聯。反之,B表中的一條記錄只能與B表中的一條記錄相關聯。
數據庫中實現方式:
經過外鍵來實現一對多,在‘多’表中增長外鍵對‘一’表的主鍵進行引用
一、在Django中的實現:
在「多」的實體類中增長:
屬性(字段)名 = models.ForeignKey("一"的實體類名)
二、關聯查詢
# Book(多) 和 Publisher(一) class Book(models.Model): ... ... publisher=models.ForeignKey(Publisher)
# 正向查詢 - 經過Book查詢Publisher # 查詢id爲1的書籍的信息 book = Book.objects.get(id=1) # 查詢關聯的publisher publisher = book.publisher # 反向查詢 - 經過Publisher查詢Book # Django會在 「一」 的實體中增長關聯對象_set 屬性,用於查詢「多」的數據 # 結合 Publisher 和 Book 之間關係 :在 Publisher 中 增長了一個 book_set 屬性 publisher=Publisher.objects.get(id=1) books = publisher.book_set.all()
多對多表示,A表中的一條記錄能與B表中的多條記錄相關聯。反之,B表中的一條記錄一樣能與B表中的多條記錄相關聯。
在數據庫中的實現方式:
必選建立第三張表,關聯兩張多對多的數據表
一、在Django中實現方式:
在任意一個要實現多對多關聯的實體類中增長:
屬性(字段)名 = models.ManyToManyField(關聯的實體類名)
二、關聯查詢
# 實體類Author 與 Book多對多關聯 class Author(models.Model): ... ... book = models.ManyToManyField(Book)
# 正向查詢-經過Author查詢全部的Book author = Author.objects.get(id=1) # 經過 關聯屬性.all() 查詢全部對應數據 books = author.book.all() # 反向查詢-經過Book查詢全部的Author # Django中 會在Book(被關聯) 實體中增長一個隱式屬性author_set book = Book.objects.get(id=1) authors = book.author_set.all()
對於關聯映射的總結:
三種關聯關係的查詢中,都存在正向和反向兩種查詢方式
正向查詢都是直接用增長的關聯屬性進行查詢就能夠
反向查詢在Django中都會增長一個隱式屬性,分別是:
一對一:關聯的實體類名(小寫)
一對多:在「一」的實體增長關聯屬性「_set」屬性,用於查詢"多"的數據
多對多:與一對多相似。
未完待續......