1. 程式人生 > >Django Model Meta選項

Django Model Meta選項

efi tail set through flash tom label 屬於 兩個

參考:https://www.cnblogs.com/flash55/p/6265405.html

Django模型類的Meta是一個內部類,它同於定義一些Django模型類的行為特性.

1)abstract:這個屬性是定義當前的模型是不是一個抽象類,所謂抽象類是不會對應數據庫表的.一般我們用它來歸納一些公共屬性字段,然後繼承它的子類可以繼承這些字段. abstact = True 這個model就是一個抽象類

2)app_label:這個選型只在一種情況下使用,就是你的模型不在默認的應用程序包下的models.py文件中,這時候需要指定你這個模型是哪個應用程序的.

Options.app_label
如果一個model定義在默認的models.py,例如如果你的app的models在myapp.models子模塊下,你必須定義app_label讓Django知道它屬於哪一個app
app_label = ‘myapp‘

3)base_manager_name:指定managers的名字

4)db_table是指定自定義數據庫表格的名字的,定義該model在數據庫中的表名稱
  db_table = ‘Students‘
如果你想使用自定義的表名,可以通過以下該屬性
  table_name = ‘my_owner_table‘

5)db_tablespace:定義這個model所使用的數據庫表空間.

6)default_manger_name,指定manager的名字。

7)default_related_name:指定反向關聯的模型的名稱,需要註意的是,這個名稱應該是唯一的,建議命名中包含app和model名字以避免沖突%(app_label)s和%(model_name)s

8)get_latest_by:在model中指定一個DateField或者DateTimeField.這個設置讓你在使用model的Manager上的lastest方法時,默認使用指定字段來排序

9)manage 默認值是true,這意味著Django可以使用syncdb和reset命令來創建或移除對應的數據庫,如果你不希望這麽做,可以把manage的值設置為False

10)order_with_respect_to這個選項一般用於多對多的關系中,它指向一個關聯對象,就是說關聯對象找到這個對象後它是經過排序的,指定這個屬性後你會得到一個gget_xxx_order()和set_xxx_order()的方法,通過它們你可以設置或者獲取排序的對象

11)ordering:這個字段是告訴Django模型對象返回的記錄結果集是按照哪個字段排序的.這是一個字符串的元祖或者列表,每一個字符串都是一個字段和用一個可選的標明降序的‘-‘構成.當字段名前面沒有‘-‘時,將默認使用升序排列.使用‘?‘將會隨機排列

  • ordering=[‘order_date‘] # 按訂單升序排列
  • ordering=[‘-order_date‘] # 按訂單降序排列,-表示降序
  • ordering=[‘?order_date‘] # 隨機排序,?表示隨機
  • ordering=[‘-pub_date‘,‘author‘] # 以pub_date為降序,在以author升序排列

12)permissions:permissions主要是為了在Django Admin管理模塊下使用的,如果你設置了這個屬性可以讓指定的方法權限描述更清晰可讀。Django自動為每個設置了admin的對象創建添加,刪除和修改的權限。
permissions = ((‘can_deliver_pizzas‘,‘Can deliver pizzas‘))

13)proxy:這是為了實現代理模型使用的,如果proxy = True,表示model是其父的代理 model

14)required_db_features:

15)required_db_vendor:指定用那種數據庫

16)select_on_save:指定使用哪種保存數據的算法

17)indexes:參考這個https://blog.csdn.net/PRIMEZPY/article/details/78916371

from django.db import models

class Customer(models.Model):
 first_name = models.CharField(max_length=100) 
last_name = models.CharField(max_length=100)
class Meta: indexes = [
models.Index(fields=[‘last_name‘, ‘first_name‘]),
models.Index(fields=[‘first_name‘], name=‘first_name_idx‘),
]

18)unique_together:unique_together這個選項用於:當你需要通過兩個字段保持唯一性時使用。比如假設你希望,一個Person的FirstName和LastName兩者的組合必須是唯一的,那麽需要這樣設置:
unique_together = (("first_name", "last_name"),)
一個ManyToManyField不能包含在unique_together中。如果你需要驗證關聯到ManyToManyField字段的唯一驗證,嘗試使用signal(信號)或者明確指定through屬性。

19)verbose_name:為model創建一個易於理解的名稱,單數。

20)verbose_name_plural:和上面不同的是,為復數形式。

Django Model Meta選項