iT邦幫忙

2023 iThome 鐵人賽

DAY 1
0
自我挑戰組

Django系列 第 5

Day5~Django 漫漫長路- model的基本介紹

  • 分享至 

  • xImage
  •  

大家好,我是Leo
今天我來介紹的是django model field/images/emoticon/emoticon30.gif
OK~~~ Let's go now!!!


相信經過昨天建立model生成db table,記憶猶新
今天我們會從db的field開始講起,知己知彼才能運用自如

Model Field 一般種類


AutoField = auto incream (自動增加1,通常不需特別加入,如果沒有主鍵字段,則id自動會為主鍵)

BigAutoField = 自動增加,數字涵蓋的範圍1~9223372036854775807

IntegerField = 整數欄位

BigIntegerField = 整數,數字範圍-9223372036854775808~9223372036854775807

BinaryField = 二進制欄位

BooleanField = bool欄位

CharField = 文字欄位,需指定max_length (文字長度)

DateField = 日期格式,ex 1999-12-31,預設auto_now = False, auto_now_add = False

  • auto_now 會添加及更新
  • auto_now_add 只會添加不會更新
  • auto_now_add、auto_now、default為互斥,一個欄位只能選定一個。

DateTimeField = datetime格式,預設auto_now = False, auto_now_add = False

DecimalField = 固定精度十進制,max_digits = None , decimal_places = None

  • max_digits 最大長度,包含小數點
  • decimal_places 小數點位數

DurationField = 整數,時間間隔,datetime.timedela (時間差)

EmailField = max_length=254,檢驗email是否為有效的email

FileField = 所有檔案類型,upload_to='', storage=None, max_length=100

  • upload_to = 放置的路徑,之後後續也會講解放置路徑如何做更改
  • max_length = 預設100,可做更改
  • 默認值 FileSystemStorage,將附加到MEDIA_ROOT路徑,這個在後續setting也會設置

FloatField = 浮點數欄位

GenericIPAddressField = protocol='both', unpack_ipv4=False,ipv4 ipv6位址

  • protocol 可選擇 ipv4 | ipv6 | both

ImageField = upload_to=None, height_field=None, width_field=None, max_length=100,圖片

SlugField = max_length = 50 ,用於把某些字段語義化,變成短網址(slug)字符串。

class Article(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(max_length=100)

存入models,title是 Hello World and Today is good,如果我們用文章的標題作為url進行訪問:
www.xxx.com/article/Hello%20World%20and%20Today%20is%20good
我們如果希望用橫線-代替空格,而得到:
www.xxx.com/article/Hello-World-and-Today-is-good

TextField = 一個大文本字段

URLField = 用於保存URL地址的str類型,默認最大長度200。


Model Field 模型關係種類

ForeignKey = 多對一模型關係

  • to 對到哪一個model 《外鍵要定義在"多"的一方》
  • related_name(非必要設定之參數)=反向查詢,這後續我們會再介紹
    以下是 on_delete(再刪除時) 指定欄位的狀態
  • SET_NULL 刪除引用的對象時將其設置為空
  • CASCADE 級聯刪除,外鍵的模型對象同時刪除
  • PROTECT 阻止級聯刪除操作,彈出ProtectedError異常
  • SET_DEFAULT 將外鍵設為默認值,當字段設置了default參數時,才可以使用。
  • DO_NOTHING 不採取行動

多對一示意圖
每個公司夥伴,工作職務是眾多職務中的一種選擇,而假設每個職務的薪資皆相同,但不同的職務薪資不相同,所以這邊用多對一做關聯

https://ithelp.ithome.com.tw/upload/images/20221210/20154853ZtpBAMk7zD.jpg

ManyToManyField = 多對多模型關係

多對多示意圖
一個使用者可能同時是A,B產品部門的員工,而一個部門通常不只一個使用者,所以對auth_user and auth_group 來說是多對多的關係

https://ithelp.ithome.com.tw/upload/images/20221210/20154853hgnUHNTBuM.jpg

OneToOneField = 一對一模型關係,to , on_delete , parent_link = False

一對一示意圖
建立使用者想要平行擴展其他使用者欄位資訊,因預設的auth_user欄位不足以滿足我們所有填寫的資訊,則在這邊使用OneToOne擴展Field欄位

https://ithelp.ithome.com.tw/upload/images/20221210/201548532Lxs3zydLy.jpg


今天我們將model的Field大致都講解完,明天就要帶大家來建立平行擴展的users模型囉
我們明天見,各位掰掰~~~/images/emoticon/emoticon29.gif


上一篇
Day4~ Django 漫漫長路-一鍵生成database table
下一篇
Day6~ Django 漫漫長路- 一腳踏入DRF API的領域
系列文
Django30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言