成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Django基礎(chǔ)之六(模型理論知識)

lmxdawn / 2012人閱讀

摘要:在模型中添加是完全可選的,所有選項(xiàng)都不是必須的。一個(gè)模型的數(shù)據(jù)庫表名稱,由這個(gè)模型的應(yīng)用名和模型類名稱之間加上下劃線組成。使用來表示隨機(jī)排序。默認(rèn)值為這個(gè)選項(xiàng)為時(shí)可以對數(shù)據(jù)庫表進(jìn)行或刪除等操作。

Django模型理論知識 簡介

Django模型所在的位置:

URL--->視圖--->模型(mysql)

什么是模型:

模型就是數(shù)據(jù)的唯一的&權(quán)威的信息源

包含所存儲的詩句的必要字段和行為(屬性和方法)

一個(gè)模型對應(yīng)一張表

如何編寫模型:

模型:每個(gè)模型都用一個(gè)類表示,該類繼承自django.db.models.Model。每個(gè)模型有多個(gè)類的屬性變量,而每一個(gè)類的屬性變量又都代表了數(shù)據(jù)庫表中的一個(gè)字段
字段:每個(gè)字段通過Field類的一個(gè)實(shí)例表示 —— 例如字符字段CharField和日期字段DateTimeField。這種方法告訴Django,每個(gè)字段中保存著什么類型的數(shù)據(jù)
字段名:每個(gè)Field 實(shí)例的名字(例如username)就是字段的名字,并且是機(jī)器可讀的格式。你將在Python代碼中使用到它的值,并且你的數(shù)據(jù)庫將把它用作表的列名
模型字段

文檔

自增主鍵Field

默認(rèn)情況下Django會給每個(gè)模型添加下面這個(gè)字段

 id = models.AutoField(primary_key=True)

如果Django看到你顯式地設(shè)置了Field.primary_key, 就不會自動(dòng)添加 id 列
每個(gè)模型只能有一個(gè)字段指定primary_key=True (無論是顯式聲明還是自動(dòng)添加)

字段的自述信息

每個(gè)字段類型都接受一個(gè)可選的位置參數(shù)——字段的自述名,如果沒有給定自述名,Django將根據(jù)字段的屬性名稱自動(dòng)創(chuàng)建自述名——將屬性名稱的下劃線替換成空格
ForeignKey、 ManyToManyField 和 OneToOneField 這三個(gè)可以使用verbose_name指定自述名

例如:自述名為:"person"s first name"
first_name = models.CharField("person"s first name", max_length=30)

例如:自述名為:"first name"
first_name = models.CharField(max_length=30)

字段選項(xiàng)

每個(gè)字段有一些特有的參數(shù),例如,CharField(和它的派生類)需要max_length 參數(shù)來指定VARCHAR 數(shù)據(jù)庫字段的大小

null

如果為True,Django將用NULL來在數(shù)據(jù)庫中存儲空值
默認(rèn)值:False

blank

如果為True , 該字段允許不填
默認(rèn)值:False

null是純數(shù)據(jù)庫范疇,而blank是數(shù)據(jù)驗(yàn)證范疇的
blank=True,表單驗(yàn)證允許該字段為空
blank=False,該字段就是必須的

choices

由二元組組成的一個(gè)可迭代對象(如列表或元組),用來給字段提供選擇項(xiàng),如果設(shè)置了choices, 默認(rèn)的表單將是一個(gè)選擇框,選擇框的選擇就是choices中的選項(xiàng)
  YEAR_IN_SCHOOL_CHOICES = (
     ("FR", "Freshman"),
     ("SO", "Sophomore"),
     ("JR", "Junior"),
     ("SR", "Senior"),
  )

default

字段的默認(rèn)值,可以是一個(gè)值或者調(diào)用對象

primary_key

如果為True,那么這個(gè)字段就是模型的主鍵

unique

如果該值設(shè)置為True,這個(gè)字段的值在整張表中必須是唯一的

index

普通索引

更多

模型Meta選項(xiàng)

使用內(nèi)部的class Meta 定義模型的元數(shù)據(jù),例如:

from django.db import models
class User(models.Model):
      username = models.IntegerField()
      class Meta:
          ordering = ["username"]
模型元數(shù)據(jù)是“任何不是字段的數(shù)據(jù)”,比如排序選項(xiàng)(ordering),數(shù)據(jù)庫表名(db_table)。在模型中添加class Meta是完全可選的,所有選項(xiàng)都不是必須的。
Meta選項(xiàng)列表

db_table:db_table是用于指定自定義數(shù)據(jù)庫表名的

Django有一套默認(rèn)的按照一定規(guī)則生成數(shù)據(jù)模型對應(yīng)的數(shù)據(jù)庫表名,如果你想使用自定義的表名,就通過這個(gè)屬性指定
若不提供該參數(shù), Django 會使用 app_name + "_" + module_name 作為表的名字
Django 會根據(jù)模型類的名稱和包含它的應(yīng)用的名稱自動(dòng)指定數(shù)據(jù)庫表名稱。一個(gè)模型的數(shù)據(jù)庫表名稱,由這個(gè)模型的“應(yīng)用名” 和模型類名稱之間加上下劃線組成。
使用Meta類中的 db_table 參數(shù)來重寫數(shù)據(jù)表的名稱。
當(dāng)你通過db_table覆寫表名稱時(shí),強(qiáng)烈推薦使用小寫字母給表命名

ordering:這個(gè)字段是告訴Django模型對象返回的記錄結(jié)果集是按照哪個(gè)字段排序的

  class Meta:
      ordering = ["-order_date"]
它是一個(gè)字符串的列表或元組。每個(gè)字符串是一個(gè)字段名,前面帶有可選的“-”前綴表示倒序。前面沒有“-”的字段表示正序。使用"?"來表示隨機(jī)排序。

  ordering = ["order_date"] # 按訂單升序排列
  ordering = ["-order_date"] # 按訂單降序排列,-表示降序
  ordering = ["?order_date"] # 隨機(jī)排序,?表示隨機(jī)
  ordering = ["-pub_date", "author"] # 對 pub_date 降序,然后對 author 升序

app_label

app_label這個(gè)選項(xiàng)只在一種情況下使用,就是你的模型類不在默認(rèn)的應(yīng)用程序包下的models.py文件中,這時(shí)候你需要指定你這個(gè)模型類是那個(gè)應(yīng)用程序的

  class Meta:
      app_label="myapp"

get_last_by

由于Django的管理方法中有個(gè)lastest()方法,就是得到最近一行記錄。如果你的數(shù)據(jù)模型中有 DateField 或 DateTimeField 類型的字段,你可以通過這個(gè)選項(xiàng)來指定lastest()是按照哪個(gè)字段進(jìn)行選取的。
一個(gè) DateField 或 DateTimeField 字段的名字. 若提供該選項(xiàng), 該模塊將擁有一個(gè) get_latest() 函數(shù)以得到 "最新的" 對象(依據(jù)那個(gè)字段):
  class Meta:
      get_latest_by = "order_date"

verbose_name的意思很簡單,就是給你的模型類起一個(gè)更可讀的名字

  class Meta:
      verbose_name = "pizza"

managed:管理第三方庫一定要設(shè)置成False

由于Django會自動(dòng)根據(jù)模型類生成映射的數(shù)據(jù)庫表,如果你不希望Django這么做,可以把managed的值設(shè)置為False。
默認(rèn)值為True,這個(gè)選項(xiàng)為True時(shí)Django可以對數(shù)據(jù)庫表進(jìn)行 migrate或migrations、刪除等操作。在這個(gè)時(shí)間Django將管理數(shù)據(jù)庫中表的生命周期
如果為False的時(shí)候,不會對數(shù)據(jù)庫表進(jìn)行創(chuàng)建、刪除等操作??梢杂糜诂F(xiàn)有表、數(shù)據(jù)庫視圖等,其他操作是一樣的。

更多

數(shù)據(jù)庫的遷移

遷移是Django用于同步你的發(fā)生改變的模型(添加一個(gè)字段,刪除一個(gè)模型,等等)到你的數(shù)據(jù)庫,實(shí)質(zhì)上也是就是管理數(shù)據(jù)表的生命周期

遷移命令

makemigrations, 負(fù)責(zé)基于你的模型修改創(chuàng)建一個(gè)新的遷移
migrate, 負(fù)責(zé)執(zhí)行遷移, 以及撤銷和列出遷移的狀態(tài)。
sqlmigrate, 展示遷移的sql語句

生成遷移文件

python manage.py makemigrations dashboard
會掃描和比較你當(dāng)前遷移文件里面的版本,同時(shí)新的遷移文件會被創(chuàng)建

展示遷移的sql語句

python manage.py sqlmigrate dashboard 0007

數(shù)據(jù)遷移

python manage.py migrate dashboard

當(dāng)模型和數(shù)據(jù)庫字段不一致的問題

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/44976.html

相關(guān)文章

  • Python貓薦書系列:文也深度學(xué)習(xí),理也深度學(xué)習(xí)

    摘要:本期貓薦書欄目系列之六,就以此為話題,推薦給大家兩本書它們都叫深度學(xué)習(xí),但是內(nèi)容很不一樣。事實(shí)上,第一本書被很多人譽(yù)為深度學(xué)習(xí)的圣經(jīng),知名度極高,有一個(gè)昵稱叫作花書。 最近出了兩件大新聞,相信大家可能有所耳聞。 我來當(dāng)個(gè)播報(bào)員,給大家轉(zhuǎn)述一下: 1、中國隊(duì)在第 11 界羅馬尼亞數(shù)學(xué)大師賽(RMM)中無緣金牌。該項(xiàng)賽事是三大國際賽事之一,被譽(yù)為中學(xué)奧數(shù)的最高難度。其中一道題,令中國隊(duì)全軍...

    LuDongWei 評論0 收藏0
  • django官方文檔1.11編翻:首頁

    摘要:源網(wǎng)頁說明文檔所有關(guān)于你應(yīng)該且必須知道的。性能和優(yōu)化概述的兼容性旨在兼容多種不同版本的支持的兼容性地理框架打算成為世界級的地理框架。其目標(biāo)是盡可能簡單地構(gòu)建應(yīng)用程序并利用空間使能數(shù)據(jù)的功能。 源網(wǎng)頁:https://docs.djangoproject.co... django說明文檔 所有關(guān)于django你應(yīng)該且必須知道的。 第一步 你是否django編程新手,那就從此開始!從零開始...

    Michael_Lin 評論0 收藏0
  • JavaScript 工作原理之六-WebAssembly 對比 JavaScript 及其使用場景

    摘要:現(xiàn)在,我們將會剖析的工作原理,而最重要的是它和在性能方面的比對加載時(shí)間,執(zhí)行速度,垃圾回收,內(nèi)存使用,平臺訪問,調(diào)試,多線程以及可移植性。目前,是專門圍繞和的使用場景設(shè)計(jì)的。目前不支持多線程。 原文請查閱這里,略有改動(dòng),本文采用知識共享署名 4.0 國際許可協(xié)議共享,BY Troland。 本系列持續(xù)更新中,Github 地址請查閱這里。 這是 JavaScript 工作原理的第六章...

    jay_tian 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<