溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

django框架中常見(jiàn)Meta類(lèi)屬性有哪些

發(fā)布時(shí)間:2021-07-10 13:37:59 來(lái)源:億速云 閱讀:346 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹django框架中常見(jiàn)Meta類(lèi)屬性有哪些,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

具體如下:

Django models是Django框架自定義的一套獨(dú)特的ORM技術(shù)。

使用該層開(kāi)發(fā)的首要任務(wù)就是定義模型類(lèi)以及屬性。每個(gè)模型都可以被映射為數(shù)據(jù)庫(kù)中的一個(gè)數(shù)據(jù)表,而類(lèi)屬性被映射為為數(shù)據(jù)字段。

from django.db import models
class ModelName(models.Model):
  field1 = models.xxfield(..)
  field2 = models.xxfield(..)
  ...
  class Meta:
    db_table  = ...
    other_metas = ...

所有Django的模型繼承自django.db.models.Model

通過(guò)模型類(lèi)中額Meta子類(lèi)定義模型元數(shù)據(jù),比如數(shù)據(jù)庫(kù)名、數(shù)據(jù)默認(rèn)排序方式等,Meta類(lèi)的屬性名有Django預(yù)定義。

常見(jiàn)Meta類(lèi)屬性匯總?cè)缦拢?/strong>

1.abstract

這個(gè)屬性是定義當(dāng)前的模型是不是一個(gè)抽象類(lèi)。所謂抽象類(lèi)是不會(huì)對(duì)應(yīng)數(shù)據(jù)庫(kù)表的。一般我們用它來(lái)歸納一些公共屬性字段,然后繼承它的子類(lèi)可以繼承這些字段。

Options.abstract

如果abstract = True 這個(gè)model就是一個(gè)抽象類(lèi)

2.app_label

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

Options.app_label

如果一個(gè)model定義在默認(rèn)的models.py,例如如果你的app的models在myapp.models子模塊下,你必須定義app_label讓Django知道它屬于哪一個(gè)app

app_label = 'myapp'

3.db_table

db_table是指定自定義數(shù)據(jù)庫(kù)表名的。Django有一套默認(rèn)的按照一定規(guī)則生成數(shù)據(jù)模型對(duì)應(yīng)的數(shù)據(jù)庫(kù)表明。

Options.db_table

定義該model在數(shù)據(jù)庫(kù)中的表名稱

db_table = 'Students'

如果你想使用自定義的表名,可以通過(guò)以下該屬性

table_name = 'my_owner_table'

4.db_teblespace

Options.db_teblespace

定義這個(gè)model所使用的數(shù)據(jù)庫(kù)表空間。如果在項(xiàng)目的settin中定義那么它會(huì)使用這個(gè)值

5.get_latest_by

Options.get_latest_by

在model中指定一個(gè)DateField或者DateTimeField。這個(gè)設(shè)置讓你在使用model的Manager上的lastest方法時(shí),默認(rèn)使用指定字段來(lái)排序

6.managed

Options.managed

默認(rèn)值為T(mén)rue,這意味著Django可以使用syncdb和reset命令來(lái)創(chuàng)建或移除對(duì)應(yīng)的數(shù)據(jù)庫(kù)。默認(rèn)值為T(mén)rue,如果你不希望這么做,可以把manage的值設(shè)置為False

7.order_with_respect_to

這個(gè)選項(xiàng)一般用于多對(duì)多的關(guān)系中,它指向一個(gè)關(guān)聯(lián)對(duì)象,就是說(shuō)關(guān)聯(lián)對(duì)象找到這個(gè)對(duì)象后它是經(jīng)過(guò)排序的。指定這個(gè)屬性后你會(huì)得到一個(gè)get_xxx_order()set_xxx_order()的方法,通過(guò)它們你可以設(shè)置或者回去排序的對(duì)象

8.ordering

這個(gè)字段是告訴Django模型對(duì)象返回的記錄結(jié)果集是按照哪個(gè)字段排序的。這是一個(gè)字符串的元組或列表,沒(méi)有一個(gè)字符串都是一個(gè)字段和用一個(gè)可選的表明降序的'-'構(gòu)成。當(dāng)字段名前面沒(méi)有'-'時(shí),將默認(rèn)使用升序排列。使用'?'將會(huì)隨機(jī)排列

ordering=['order_date'] # 按訂單升序排列
ordering=['-order_date'] # 按訂單降序排列,-表示降序
ordering=['?order_date'] # 隨機(jī)排序,?表示隨機(jī)
ordering=['-pub_date','author'] # 以pub_date為降序,在以author升序排列

9.permissions

permissions主要是為了在Django Admin管理模塊下使用的,如果你設(shè)置了這個(gè)屬性可以讓指定的方法權(quán)限描述更清晰可讀。Django自動(dòng)為每個(gè)設(shè)置了admin的對(duì)象創(chuàng)建添加,刪除和修改的權(quán)限。

permissions = (('can_deliver_pizzas','Can deliver pizzas'))

10.proxy

這是為了實(shí)現(xiàn)代理模型使用的,如果proxy = True,表示model是其父的代理 model

11.unique_together

unique_together這個(gè)選項(xiàng)用于:當(dāng)你需要通過(guò)兩個(gè)字段保持唯一性時(shí)使用。比如假設(shè)你希望,一個(gè)Person的FirstName和LastName兩者的組合必須是唯一的,那么需要這樣設(shè)置:

unique_together = (("first_name", "last_name"),)

一個(gè)ManyToManyField不能包含在unique_together中。如果你需要驗(yàn)證關(guān)聯(lián)到ManyToManyField字段的唯一驗(yàn)證,嘗試使用signal(信號(hào))或者明確指定through屬性。

12.verbose_name

verbose_name的意思很簡(jiǎn)單,就是給你的模型類(lèi)起一個(gè)更可讀的名字一般定義為中文,我們:

verbose_name = "學(xué)校"

13.verbose_name_plural

這個(gè)選項(xiàng)是指定,模型的復(fù)數(shù)形式是什么,比如:

verbose_name_plural = "學(xué)校"

如果不指定Django會(huì)自動(dòng)在模型名稱后加一個(gè)'s'

模型層普通字段類(lèi)型:

普通字段是指模型類(lèi)中除了外鍵關(guān)系外的數(shù)據(jù)字段屬性,用于定義數(shù)據(jù)庫(kù)中模型字段類(lèi)型、定義標(biāo)簽類(lèi)型顯示模型字段以及定義表單數(shù)據(jù)驗(yàn)證HTML,所有的字段的屬性繼承自抽象類(lèi)django.db.models.Field。

1、models.AutoField   ---自增列 = int(11)    如果沒(méi)有的話,默認(rèn)會(huì)生成一個(gè)名稱為 id 的列,如果要顯示的自定義一個(gè)自增列,必須將給列設(shè)置為主鍵 primary_key=True。

2、models.CharField   ---字符串字段  單行輸入,用于較短的字符串,如要保存大量文本, 使用 TextField。必須 max_length 參數(shù),django會(huì)根據(jù)這個(gè)參數(shù)在數(shù)據(jù)庫(kù)層和校驗(yàn)層限制該字段所允許的最大字符數(shù)。

3、models.BooleanField   ---布爾類(lèi)型=tinyint(1)   不能為空,Blank=True

4、models.ComaSeparatedIntegerField   ---用逗號(hào)分割的數(shù)字=varchar   繼承CharField,所以必須 max_lenght 參數(shù),

5、models.DateField   ---日期類(lèi)型 date   對(duì)于參數(shù),auto_now = True 則每次更新都會(huì)更新這個(gè)時(shí)間;auto_now_add 則只是第一次創(chuàng)建添加,之后的更新不再改變。

6、models.DateTimeField   ---日期類(lèi)型 datetime   同DateField的參數(shù)

7、models.Decimal   ---十進(jìn)制小數(shù)類(lèi)型 = decimal   必須指定整數(shù)位max_digits和小數(shù)位decimal_places

8、models.EmailField   ---字符串類(lèi)型(正則表達(dá)式郵箱) =varchar   對(duì)字符串進(jìn)行正則表達(dá)式   一個(gè)帶有檢查 Email 合法性的 CharField,不接受 maxlength 參數(shù)。

9、models.FloatField   ---浮點(diǎn)類(lèi)型 = double   浮點(diǎn)型字段。 必須提供兩個(gè) 參數(shù), 參數(shù)描述:

  •     max_digits:總位數(shù)(不包括小數(shù)點(diǎn)和符號(hào))

  •     decimal_places:小數(shù)位數(shù)。如:要保存最大值為 999 (小數(shù)點(diǎn)后保存2位),你要這樣定義字段:models.FloatField(…,max_digits=5, decimal_places=2),要保存最大值一百萬(wàn)(小數(shù)點(diǎn)后保存10位)的話,你要這樣定義:models.FloatField(…,max_digits=19, decimal_places=10)

10、models.IntegerField   ---整形   用于保存一個(gè)整數(shù)

11、models.BigIntegerField   ---長(zhǎng)整形

  integer_field_ranges = {
    'SmallIntegerField': (-32768, 32767),
    'IntegerField': (-2147483648, 2147483647),
    'BigIntegerField': (-9223372036854775808, 9223372036854775807),
    'PositiveSmallIntegerField': (0, 32767),
    'PositiveIntegerField': (0, 2147483647),
  }

12、models.IPAddressField   ---字符串類(lèi)型(ip4正則表達(dá)式)   一個(gè)字符串形式的 IP 地址, (如 “202.1241.30″)。

13、models.GenericIPAddressField   ---字符串類(lèi)型(ip4和ip6是可選的)   參數(shù)protocol可以是:both、ipv4、ipv6   驗(yàn)證時(shí),會(huì)根據(jù)設(shè)置報(bào)錯(cuò)

14、models.NullBooleanField   ---允許為空的布爾類(lèi)型   類(lèi)似 BooleanField, 不過(guò)允許 NULL 作為其中一個(gè)選項(xiàng)。 推薦使用這個(gè)字段而不要用 BooleanField 加 null=True 選項(xiàng)。 admin 用一個(gè)選擇框         <select> (三個(gè)可選擇的值: “Unknown”, “Yes” 和 “No” ) 來(lái)表示這種字段數(shù)據(jù)。

15、models.PositiveIntegerField   ---正Integer   類(lèi)似 IntegerField, 但取值范圍為非負(fù)整數(shù)(這個(gè)字段應(yīng)該是允許0值的…可以理解為無(wú)符號(hào)整數(shù))

16、models.PositiveSmallIntegerField   ---正smallInteger  正小整型字段,類(lèi)似 PositiveIntegerField, 取值范圍較小(數(shù)據(jù)庫(kù)相關(guān))SlugField“Slug” 是一個(gè)報(bào)紙術(shù)語(yǔ)。 slug 是某個(gè)東西的小小標(biāo)記(短簽), 只包    含字母,數(shù)字,下劃線和連字符。它們通常用于URLs。 若你使用 Django 開(kāi)發(fā)版本,你可以指定 maxlength。 若 maxlength 未指定, Django 會(huì)使用默認(rèn)長(zhǎng)度: 50,它接受一個(gè)額外的參數(shù):

    prepopulate_from: 來(lái)源于slug的自動(dòng)預(yù)置列表

17、models.SlugField   ---減號(hào)、下劃線、字母、數(shù)字   它們通常用于URLs。

18、models.SmallIntegerField   ---數(shù)字   數(shù)據(jù)庫(kù)中的字段有:tinyint、smallint、int、bigint.   類(lèi)似 IntegerField, 不過(guò)只允許某個(gè)取值范圍內(nèi)的整數(shù)。(依賴數(shù)據(jù)庫(kù))

19、models.TextField   ---字符串=longtext ,一個(gè)容量很大的文本字段, admin 管理界面用 <textarea>多行編輯框表示該字段數(shù)據(jù)。

20、models.TimeField   ---時(shí)間 HH:MM[:ss[.uuuuuu]]   時(shí)間字段,類(lèi)似于 DateField 和 DateTimeField。

21、models.URLField   ---字符串,地址正則表達(dá)式   用于保存URL。若 verify_exists 參數(shù)為 True (默認(rèn)), 給定的 URL 會(huì)預(yù)先檢查是否存在(即URL是否被有效裝入且沒(méi)有返回404響應(yīng)).

22、models.BinaryField   ---二進(jìn)制

23、models.ImageField   ---圖片   類(lèi)似 FileField, 不過(guò)要校驗(yàn)上傳對(duì)象是否是一個(gè)合法圖片。它有兩個(gè)可選參數(shù):height_field 和 width_field,如果提供這兩個(gè)參數(shù),則圖片將按提供的高度和寬度規(guī)格保存。     該字段要求 Python Imaging 庫(kù)。

24、models.FilePathField   ---選擇指定目錄按限制規(guī)則選擇文件,有三個(gè)參數(shù)可選, 其中”path”必需的,這三個(gè)參數(shù)可以同時(shí)使用, 參數(shù)描述:

  •     path:必需參數(shù),一個(gè)目錄的絕對(duì)文件系統(tǒng)路徑。 FilePathField 據(jù)此得到可選項(xiàng)目。 Example: “/home/images”;

  •     match:可選參數(shù), 一個(gè)正則表達(dá)式, 作為一個(gè)字符串, FilePathField 將使用它過(guò)濾文件名。 注意這個(gè)正則表達(dá)式只會(huì)應(yīng)用到 base filename 而不是路徑全名。 Example: “foo。*\。txt^”, 將匹配文件 foo23.txt 卻不匹配 bar.txt 或 foo23.gif;

  •     recursive:可選參數(shù), 是否包括 path 下全部子目錄,True 或 False,默認(rèn)值為 False。

  •     match 僅應(yīng)用于 base filename, 而不是路徑全名。 如:FilePathField(path=”/home/images”, match=”foo.*”, recursive=True)…會(huì)匹配 /home/images/foo.gif 而不匹配 /home/images/foo/bar.gif

25、models.FileField   ---文件上傳字段。 要求一個(gè)必須有的參數(shù): upload_to, 一個(gè)用于保存上載文件的本地文件系統(tǒng)路徑。 這個(gè)路徑必須包含 strftime formatting, 該格式將被上載文件的 date/time 替換(so that uploaded files don't fill up the given directory)。在一個(gè) model 中使用 FileField 或 ImageField 需要以下步驟:在你的 settings 文件中, 定義一個(gè)完整路徑給 MEDIA_ROOT 以便讓 Django在此處保存上傳文件。 (出于性能考慮,這些文件并不保存到數(shù)據(jù)庫(kù)。) 定義 MEDIA_URL 作為該目錄的公共 URL。 要確保該目錄對(duì) WEB 服務(wù)器用戶帳號(hào)是可寫(xiě)的。在你的 model 中添加 FileField 或 ImageField, 并確保定義了 upload_to 選項(xiàng),以告訴 Django 使用 MEDIA_ROOT 的哪個(gè)子目錄保存上傳文件。你的數(shù)據(jù)庫(kù)中要保存的只是文件的路徑(相對(duì)于 MEDIA_ROOT)。 出于習(xí)慣你一定很想使用 Django 提供的 get_<fieldname>_url 函數(shù)。舉例來(lái)說(shuō),如果你的 ImageField 叫作 mug_shot, 你就可以在模板中以 {{ object。get_mug_shot_url }} 這樣的方式得到圖像的絕對(duì)路徑。

26、models.PhoneNumberField   ---一個(gè)帶有合法美國(guó)風(fēng)格電話號(hào)碼校驗(yàn)的 CharField(格式:XXX-XXX-XXXX)

27、models.USStateField   ---美國(guó)州名縮寫(xiě),由兩個(gè)字母組成(天朝人民無(wú)視)。

28、models.XMLField   ---XML字符字段,校驗(yàn)值是否為合法XML的 TextField,必須提供參數(shù):

schema_path:校驗(yàn)文本的 RelaxNG schema 的文件系統(tǒng)路徑。

Field中的參數(shù)意義如下:

1.null :缺省設(shè)置為false.通常不將其用于字符型字段上,比如    CharField,TextField上.字符型字段如果沒(méi)有值會(huì)返回空字符串。

2.blank:該字段是否可以為空。如果為假,則必須有值

3.choices:一個(gè)用來(lái)選擇值的2維元組。第一個(gè)值是實(shí)際存儲(chǔ)的值,第二個(gè)用來(lái)方便進(jìn)行選擇。如SEX_CHOICES= ((‘F','Female'),(‘M','Male'),)

4.core:db_column,db_index 如果為真將為此字段創(chuàng)建索引

5.default:設(shè)定缺省值

6.editable:如果為假,admin模式下將不能改寫(xiě)。缺省為真

7.help_text:admin模式下幫助文檔

8.primary_key:設(shè)置主鍵,如果沒(méi)有設(shè)置django創(chuàng)建表時(shí)會(huì)自動(dòng)加上:

9.radio_admin:用于admin模式下將select轉(zhuǎn)換為radio顯示。只用于ForeignKey或者設(shè)置了choices

10.unique:數(shù)據(jù)唯一 unique=True. Only one

11.unique_for_date:日期唯一,如下例中系統(tǒng)將不允許title和pub_date兩個(gè)都相同的數(shù)據(jù)重復(fù)出現(xiàn)

12.title = meta.CharField(maxlength=30,unique_for_date='pub_date')

13.unique_for_month / unique_for_year:用法同上

14.validator_list:有效性檢查。非有效產(chǎn)生 django.core.validators.ValidationError 錯(cuò)誤

以上是“django框架中常見(jiàn)Meta類(lèi)屬性有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI