1. 程式人生 > >django之模型類的建立

django之模型類的建立

定義模型類

  • 模型類被定義在"應用/models.py"檔案中。
  • 模型類必須繼承自Model類,位於包django.db.models中。

接下來首先以"圖書-英雄"管理為例進行演示。

1 定義

建立應用booktest,在models.py 檔案中定義模型類。

from django.db import models

#定義圖書模型類BookInfo
class BookInfo(models.Model):
    btitle = models.CharField(max_length=20, verbose_name='名稱')
    bpub_date = models.DateField(verbose_name='釋出日期')
    bread = models.IntegerField(default=0, verbose_name='閱讀量')
    bcomment = models.IntegerField(default=0, verbose_name='評論量')
    is_delete = models.BooleanField(default=False, verbose_name='邏輯刪除')

    class Meta:
        db_table = 'tb_books'  # 指明資料庫表名
        verbose_name = '圖書'  # 在admin站點中顯示的名稱
        verbose_name_plural = verbose_name  # 顯示的複數名稱

    def __str__(self):
        """定義每個資料物件的顯示資訊"""
        return self.btitle

#定義英雄模型類HeroInfo
class HeroInfo(models.Model):
    GENDER_CHOICES = (
        (0, 'male'),
        (1, 'female')
    )
    hname = models.CharField(max_length=20, verbose_name='名稱') 
    hgender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name='性別')  
    hcomment = models.CharField(max_length=200, null=True, verbose_name='描述資訊') 
    hbook = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name='圖書')  # 外來鍵
    is_delete = models.BooleanField(default=False, verbose_name='邏輯刪除')

    class Meta:
        db_table = 'tb_heros'
        verbose_name = '英雄'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.hname

1) 資料庫表名

模型類如果未指明表名,Django預設以 小寫app應用名_小寫模型類名 為資料庫表名。

可通過db_table 指明資料庫表名。

2) 關於主鍵

django會為表建立自動增長的主鍵列,每個模型只能有一個主鍵列,如果使用選項設定某屬性為主鍵列後django不會再建立自動增長的主鍵列。

預設建立的主鍵列屬性為id,可以使用pk代替,pk全拼為primary key。

3) 屬性命名限制

  • 不能是python的保留關鍵字。
  • 不允許使用連續的下劃線,這是由django的查詢方式決定的。
  • 定義屬性時需要指定欄位型別,通過欄位型別的引數指定選項,語法如下:

    屬性=models.欄位型別(選項)
    

4)欄位型別

型別 說明
AutoField 自動增長的IntegerField,通常不用指定,不指定時Django會自動建立屬性名為id的自動增長屬性
BooleanField 布林欄位,值為True或False
NullBooleanField 支援Null、True、False三種值
CharField 字串,引數max_length表示最大字元個數
TextField 大文字欄位,一般超過4000個字元時使用
IntegerField 整數
DecimalField 十進位制浮點數, 引數max_digits表示總位數, 引數decimal_places表示小數位數
FloatField 浮點數
DateField 日期, 引數auto_now表示每次儲存物件時,自動設定該欄位為當前時間,用於"最後一次修改"的時間戳,它總是使用當前日期,預設為False; 引數auto_now_add表示當物件第一次被建立時自動設定當前時間,用於建立的時間戳,它總是使用當前日期,預設為False; 引數auto_now_add和auto_now是相互排斥的,組合將會發生錯誤
TimeField 時間,引數同DateField
DateTimeField 日期時間,引數同DateField
FileField 上傳檔案欄位
ImageField 繼承於FileField,對上傳的內容進行校驗,確保是有效的圖片

5) 選項

選項 說明
null 如果為True,表示允許為空,預設值是False
blank 如果為True,則該欄位允許為空白,預設值是False
db_column 欄位的名稱,如果未指定,則使用屬性的名稱
db_index 若值為True, 則在表中會為此欄位建立索引,預設值是False
default 預設
primary_key 若為True,則該欄位會成為模型的主鍵欄位,預設值是False,一般作為AutoField的選項使用
unique 如果為True, 這個欄位在表中必須有唯一值,預設值是False

null是資料庫範疇的概念,blank是表單驗證範疇的

6) 外來鍵

在設定外來鍵時,需要通過on_delete選項指明主表刪除資料時,對於外來鍵引用表資料如何處理,在django.db.models中包含了可選常量:

  • CASCADE 級聯,刪除主表資料時連通一起刪除外來鍵表中資料

  • PROTECT 保護,通過丟擲ProtectedError異常,來阻止刪除主表中被外來鍵應用的資料

  • SET_NULL 設定為NULL,僅在該欄位null=True允許為null時可用

  • SET_DEFAULT 設定為預設值,僅在該欄位設定了預設值時可用

  • SET() 設定為特定值或者呼叫特定方法,如

    from django.conf import settings
    from django.contrib.auth import get_user_model
    from django.db import models
    
    def get_sentinel_user():
        return get_user_model().objects.get_or_create(username='deleted')[0]
    
    class MyModel(models.Model):
        user = models.ForeignKey(
            settings.AUTH_USER_MODEL,
            on_delete=models.SET(get_sentinel_user),
        )
    
  • DO_NOTHING 不做任何操作,如果資料庫前置指明級聯性,此選項會丟擲IntegrityError異常

2 遷移

將模型類同步到資料庫中。

1)生成遷移檔案

python manage.py makemigrations

2)同步到資料庫中

python manage.py migrate

3 新增測試資料

insert into tb_books(btitle,bpub_date,bread,bcomment,is_delete) values
('射鵰英雄傳','1980-5-1',12,34,0),
('天龍八部','1986-7-24',36,40,0),
('笑傲江湖','1995-12-24',20,80,0),
('雪山飛狐','1987-11-11',58,24,0);
insert into tb_heros(hname,hgender,hbook_id,hcomment,is_delete) values
('郭靖',1,1,'降龍十八掌',0),
('黃蓉',0,1,'打狗棍法',0),
('黃藥師',1,1,'彈指神通',0),
('歐陽鋒',1,1,'蛤蟆功',0),
('梅超風',0,1,'九陰白骨爪',0),
('喬峰',1,2,'降龍十八掌',0),
('段譽',1,2,'六脈神劍',0),
('虛竹',1,2,'天山六陽掌',0),
('王語嫣',0,2,'神仙姐姐',0),
('令狐沖',1,3,'獨孤九劍',0),
('任盈盈',0,3,'彈琴',0),
('嶽不群',1,3,'華山劍法',0),
('東方不敗',0,3,'葵花寶典',0),
('胡斐',1,4,'胡家刀法',0),
('苗若蘭',0,4,'黃衣',0),
('程靈素',0,4,'醫術',0),
('袁紫衣',0,4,'六合拳',0);

相關推薦

django模型建立

定義模型類 模型類被定義在"應用/models.py"檔案中。 模型類必須繼承自Model類,位於包django.db.models中。 接下來首先以"圖書-英雄"管理為例進行演示。 1 定義 建立應用booktest,在models.py 檔案中定義模型類。 fr

Django項目的ORM操作--模型數據查詢

ron 基本 import lte nth true 實例對象 exclude false 1.查詢基本格式及理解: 類名.objects.[查詢條件]   例如我們要查詢數據庫中一張表(bookinfo)的所有數據,sql語句為:select * from bookinf

潭州課堂25班:Ph201805201 django框架 第五課 自定義簡單標籤,包含標籤,模型建立,梳理建立 (課堂筆記)

自定義標籤同自定義過渡器一樣,要建立檔案,在配置檔案中以APP方法註冊,對方法進註冊,在 html 檔案中引入,..  由模板傳參     在 在配置檔案中改時區: 由檢視函式傳參       &nbs

西遊路——python全棧——Django模型中Meta元物件瞭解

目錄 Django中模型類中Meta元物件瞭解   1.使用python manage.py shell 進入編輯命令列模式,可以直接進入專案(為我們配置好了環境)   2.對於元類資料的獲取,需要使用_meta獲取   3.幾個重要屬性    

67、django模型層(model)--查詢補充及mookie

lte 評論 spl 需要 delete net 使用 刪除 ces 本篇導航: F查詢與Q查詢 cookie 一、F查詢與Q查詢 1、以Book表為例 class Book(models.Model) : title = models.Cha

Django模型ORM

鏈接 否則 包含 子類 filter 項目 失去 ref bject Object Relational Mapping(ORM) ORM介紹 ORM概念 對象關系映射(Object Relational Mapping,簡稱ORM)模式是一種為了解決面向對象與關系數

django定義模型

  模型類被定義在應用資料夾下的model.py中 模型類必須繼承Django的models.Model類 屬性名不能用連續的兩條下劃線__ 主鍵:primary key,簡寫 pk 不需要主動定義,django會自動生成自增長的主鍵,屬性名叫&n

Django模型---ORM簡介

ORM   ORM,是“物件-關係-對映”的簡稱,它實現了資料模型與資料庫的解耦,即資料模型的設計不需要依賴於特定的資料庫,通過簡單的配置就可以輕鬆更換資料庫,這極大的減輕了開發人員的工作量,不需要面對因資料庫變更而導致的無效勞動。 建立表/模型 建立專案,在models.py下建立表

Django模型---ORM 單表操作

以上一隨筆中建立的book表為例講解單表操作            新增表記錄                 方式一 # create方法的返回值

Django模型---ORM 多表操作

                                            &

Djangomodel模組建立表完整過程

Django中,與資料庫相關的模組是model模組,它提供了一種簡單易操作的API方式與資料庫互動,它是通過ORM對映的方式來操作資料庫,一個類對應資料庫一張表,一個類屬性,對應該表的一個欄位,一個例項化的類物件就是一個表中的一行資料資訊。在開發的階段,工程師只需要python語言本身進行程式碼設計,而不用太

django模型關係

一對一模型:關係欄位定義在任意一端中 一對多模型:關係欄位定義在多的一端中;一對多中,外來鍵對應的是主表的一個物件,而不是一個單純的id 多對多模型:自動生成第三張表,第三張表為關係表;先例項化物件新增兩張表,然後再新增關係 生成遷移檔案: python manage.py makemigratio

DRF---Django模型序列化器 ModelSerializer

關於常規的Serializer使用方法,可以參考 常規的Serializer講解 如果我們需要使用的序列化器,是對應Django的模型類,那麼,DRF已經為我們提供了ModelSerializer模型類序列化器,可以滿足我們的需求,快速建立一個Serializer類。 Mode

Django模型層,單,多表操作(一)

一:資料庫型別   資料庫主要分成兩類,關係型資料庫和非關係型資料庫,具體區別可參照部落格地址,https://blog.csdn.net/u012965373/article/details/51779361。以下個人簡單理解   1:關係型資料庫:     ORM 物件關係型對映。用物件的方式儲存資

Django模型層,單,多表操作(三)

一:多表操作之增、刪、改   1.1:增:   一對多:   方式1:     publish_obj=Publish.objects.get(nid=1)     book_obj=Book.objects.create(title="海爾兄弟",publi

Django模型層,單,多表操作(二)

一:單表操作之增,刪,改   1.1:增     方式一:       book_obj=Book.objects.create(title="python葵花寶典",state=True,price=100,publish="蘋果出版社",pub_date="2012-12-12")     方式二

Django模型層-瞭解ORM

ORM(物件-關係-對映)簡單使用 ORM實現了資料模型與資料庫的解耦合,即資料模型的設計不需要指定特定的資料庫,通過python程式碼可以直接對資料庫實現增刪改查 MySQL語法 #sql中的表

Django模型層-多表操作

自動 int its 數量 val foreign 編寫 ces first 多表操作 數據庫表關系 一對多:兩個表之間的關系一旦確定為一對多,必須在數據多的表中創建關聯字段 多對多:兩個表之間的關系一定確定為多對多,必須創建第三張表(關聯表) 一對一:一旦兩個表之間的關

Django使用者模型User

Django認證系統同時處理認證和授權。簡單地講,認證驗證一個使用者是否它們聲稱的那個人,授權決定一個通過了認證的使用者被允許做什麼。 這裡的詞語“認證”同時指代這兩項任務,即Django的認證系統同時提供了認證機制和許可權機制。 Django的認證系統包含

DRF---Django模型序列化器 ModelSerializer

關於常規的Serializer使用方法,可以參考 常規的Serializer講解 如果我們需要使用的序列化器,是對應Django的模型類,那麼,DRF已經為我們提供了ModelSerializer模型類序列化器,可以滿足我們的需求,快速建立一個Serializ