元類選項(xiàng)
abstract=False True就表示模型是抽象基類
app_label 應(yīng)用程序表現(xiàn)线召,表示這個(gè)model是在哪個(gè)應(yīng)用程序下的
base_manager_name model屬性manager的名稱
db_table = 'music_album' 自定義數(shù)庫(kù)的表名稱前綴
get_latest_by = "datefield_name" 根據(jù)時(shí)間字段datefield_name排序躏啰,latest()和earliest()方法中使用的默認(rèn)字段焊傅。
db_tablespace 當(dāng)前模型所使用的數(shù)據(jù)庫(kù)表空間的名字瓶竭。默認(rèn)值是項(xiàng)目設(shè)置中的DEFAULT_TABLESPACE。如果后端并不支持表空間肥橙,這個(gè)選項(xiàng)可以忽略摸恍。
default_manager_name 模型默認(rèn)manager的名稱
default_related_name 用于關(guān)聯(lián)models之間的反查名字赶诊,默認(rèn)是<model_name>_set
get_latest_by 設(shè)置模型中有序字段
order_with_respect_to 使得model按照給定的字段排序谆沃,通常情況下是一個(gè)外鍵
ordering = ['-fieldname'] 對(duì)象默認(rèn)的順序,字段前面帶有'-'符號(hào)表示逆序钝凶,否則正序。排序會(huì)增加查詢額外開銷唁影。
permissions 權(quán)限 以元組的方式指定 permissions = (("can_deliver_pizzas", "Can deliver pizzas"),)
proxy = True 它作為另一個(gè)模型的子類,將會(huì)作為一個(gè)代理模型掂名。
required_db_features 當(dāng)前連接應(yīng)該具有的數(shù)據(jù)庫(kù)特性列表 据沈??
unique_together unique_together = (("driver", "restaurant"),) 設(shè)置聯(lián)合唯一饺蔑。unique約束锌介。ManyToManyField不能包含在unique_together中。
index_together 設(shè)置聯(lián)合索引猾警。
index_together = [
["pub_date", "deadline"],
]
方便起見孔祸,處理單一字段的集合時(shí)index_together = ["pub_date", "deadline"]
verbose_name 在Admin里,個(gè)易于理解的表名稱发皿,為單數(shù):verbose_name = "pizza"
verbose_name_plural 在Admin里顯示的表名稱崔慧,為復(fù)數(shù):verbose_name_plural = "stories",一般同verbose_name一同設(shè)置穴墅。
例如
from django.db import models
class Ox(models.Model):
horn_length = models.IntegerField()
class Meta:
ordering = ["horn_length"]
verbose_name_plural = "oxen"
- default_related_name
from django.db import models class Foo(models.Model):
pass
class Bar(models.Model):
foo = models.ForeignKey(Foo)
class Meta:
default_related_name = 'bars'
>>> bar = Bar.objects.get(pk=1)
>>> # Using model name "bar" as lookup string is deprecated. >>> Foo.objects.get(bar=bar)
>>> # You should use default_related_name "bars".
>>> Foo.objects.get(bars=bar)
- order_with_respect_to
from django.db import models
class Question(models.Model):
text = models.TextField()
class Answer(models.Model):
question = models.ForeignKey(Question,on_delete=models.CASCADE) # 外鍵 多對(duì)一 1個(gè)問(wèn)題有多個(gè)答案惶室。一個(gè)答案對(duì)應(yīng)一個(gè)問(wèn)題
class Meta:
order_with_respect_to = 'question'
>>> question = Question.objects.get(id=1) #獲取一個(gè)問(wèn)題實(shí)例
>>> question.get_answer_order() #該問(wèn)題實(shí)例的答案的返回順序
[1, 2, 3]
>>> answer = Answer.objects.get(id=2)
>>> answer.get_next_in_order() <Answer: 3>
>>> answer.get_previous_in_order() <Answer: 1>