本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理
以下文章來源于騰訊云 作者:Python進階者
( 想要學習Python?Python學習交流群:1039649593,滿足你的需求,資料都已經上傳群檔案流,可以自行下載!還有海量最新2020python學習資料, )
django從入門到精通No.2----模型
一、前言
學過orm系統自然之道模型的重要性,很多web站點都需要與資料庫互動,這個時候模型的設計就顯得尤為重要,一個好的模型會使得專案方便管理并且易于維護,比如我們學過的flask,里面的sqlalchemy就是這樣一個優秀的模塊,通過它可以快速和資料庫建立通道,從而使得web編程更為高效,本文主要講解django的模型,
二、模型的定義
模型可以定義儲存資料的欄位和值,比如我們在進行表單提交的時候,一些注冊資訊就可以利用模型來進行管理,然后統一提交到資料庫中,簡單來說,模型是與資料庫有關的操作集合,
三、模型的欄位和約束
這里我們需要在he檔案夾中找到models.py檔案,然后我們試著改動一下這個檔案的內容,如下:
from django.db import models ? # Create your models here. class book(models.Model): book_name=models.CharField(max_length=30) book_price=models.IntegerField()
用于制作模型的每個類都必須繼承models.Model類,然后我們會使用欄位來對資料進行記錄,django中有很多欄位,如下:

四、關聯關系
django提供了三種資料庫關聯關系,即多對一,一對一,多對多,廢話不多說,就是干,
1.多對一
因為是關聯關系,所以我們必須指定兩個類來進行相互操作,這里涉及到一個外鍵的操作,即ForeignKey欄位,而且外鍵要定義在多的一方,我們先來創建兩個類,如下:
from django.db import models ? # Create your models here. class book(models.Model): id=models.AutoField(primary_key=True) book_name=models.CharField(max_length=30) book_price=models.IntegerField() class people(models.Model): article=models.CharField(max_length=20) age=models.IntegerField() bk=models.ForeignKey(book,on_delete=models.CASCADE)
ForeignKey提供了多個引數,如下
ForeignKey() to # 要進行關聯的表名 to_field=None # 要關聯的表中的欄位名稱 on_delete=None # 當洗掉關聯表中的資料時,當前表與其關聯的行的行為 - models.CASCADE,洗掉關聯資料,與之關聯也洗掉 - models.DO_NOTHING,洗掉關聯資料,引發錯誤IntegrityError - models.PROTECT,洗掉關聯資料,引發錯誤ProtectedError - models.SET_NULL 洗掉關聯資料,與之關聯的值設為null(前提FK欄位需要設為可空) - models.SET_DEFAULT 洗掉關聯資料,與之關聯的值設為默認值(前提FK欄位設定默認值) - models.SET,洗掉關聯資料, 1. 與之關聯的值設定為指定值,設定:models.SET(值) 2. 與之關聯的值設定為可執行物件的回傳值,設定:models.SET(可執行物件) related_name=None # 反向操作時,使用的欄位名,用于代替表名_set related_query_name=None,# 反向操作時,使用的連接前綴,用于替換【表名】 limit_choices_to=None, # 在Admin或ModelForm中顯示關聯資料時,提供的條件,字典型別 db_constraint=True # 是否在資料庫中創建外鍵約束 parent_link=False # 在Admin中是否顯示關聯資料
2.多對多
多對多的表,必須設中間關聯表,關聯表設獨立主鍵,并引入兩個“多”頭的表的主鍵作為關聯表的外鍵,如下:
from django.db import models ? # Create your models here. class book(models.Model): id=models.AutoField(primary_key=True) book_name=models.CharField(max_length=30) book_price=models.IntegerField() class people(models.Model): article=models.CharField(max_length=20) age=models.IntegerField() bk=models.ForeignKey(book,on_delete=models.CASCADE) class title(models.Model): start=models.DateTimeField(default=timezone.now) end=models.DateTimeField(auto_now=True) p=models.ManyToManyField(book)
如果你想知道更多成員關系的細節,你可以指定一個中介模型來定義多對多關系,可以將其它欄位放在中介模型中,源模型的欄位使用through引數指向中介模型,如下:
from django.db import models from django.utils import timezone # Create your models here. class book(models.Model): id=models.AutoField(primary_key=True) book_name=models.CharField(max_length=30) book_price=models.IntegerField() class people(models.Model): article=models.CharField(max_length=20) age=models.IntegerField() class title(models.Model): start=models.DateTimeField(default=timezone.now) end=models.DateTimeField(auto_now=True) p=models.ManyToManyField(people,through='zj') class zj(models.Model): bk=models.ForeignKey(book,on_delete=models.CASCADE) p=models.ForeignKey(people,on_delete=models.CASCADE) dt=models.Datefield()
所有引數如下:
ManyToManyField() to # 要進行關聯的表名 related_name=None # 反向操作時,使用的欄位名,用于代替表名_set related_query_name=None # 反向操作時,使用的連接前綴,用于替換表名 limit_choices_to=None # 在Admin或ModelForm中顯示關聯資料時,提供的條件,字典型別 symmetrical=None # 僅用于多對多自關聯時,用于指定內部是否創建反向操作的欄位,boolean型別 through=None # 自定義第三張表時,使用欄位用于指定關系表 through_fields=None # 自定義第三張表時,使用欄位用于指定關系表中那些欄位做多對多關系表 db_constraint=True # 是否在資料庫中創建外鍵約束 db_table=None # 默認創建第三張表時,資料庫中表的名稱
3.一對一
一對一其實就是 一對多 + 唯一索引,當兩個類之間有繼承關系時,默認會創建一個一對一欄位,一對一使用OneToOneField來實作,如下:
from django.db import models ? # Create your models here. class book(models.Model): id=models.AutoField(primary_key=True) book_name=models.CharField(max_length=30) book_price=models.IntegerField() class people(models.Model): article=models.CharField(max_length=20) age=models.IntegerField() b=models.OneToOneField(book)
它里面的引數如下:
OneToOneField() to # 要進行關聯的表名 to_field=None # 要關聯的表中的欄位名稱 on_delete=None # 當洗掉關聯表中的資料時,當前表與其關聯的行的行為
五、管理員登陸
為了能讓大家提前看到django的資料操作,django內置了一款非常到位的系統管理員登陸設計系統,首先我們創建下用戶,如下:
python manage.py createsuperuser
然后我們按照要求一步步設定引數,如圖:
然后我們啟動服務器并且進入到下圖這個頁面中去,如圖:
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/234626.html
標籤:Python
