元數據Meta

元數據,指的是「除了字段外的全部內容」,例如排序方式、數據庫表名、人類可讀的單數或者複數名等等。全部的這些都是非必須的,甚至元數據自己對模型也是非必須的。數據庫

在模型中增長元數據,須要在模型類中添加一個子類,名字是固定的Meta,而後在這個Meta類下面增長各類元數據選項。django

class Contract(models.Model):
    """合同"""

    sn = models.CharField(u'合同號', max_length=128, unique=True)
    name = models.CharField(u'合同名稱', max_length=64)
    memo = models.TextField(u'備註', blank=True, null=True)
    price = models.IntegerField(u'合同金額')
    detail = models.TextField(u'合同詳細', blank=True, null=True)
    start_date = models.DateField(blank=True)
    end_date = models.DateField(blank=True)
    license_num = models.IntegerField(u'license數量', blank=True)
    create_date = models.DateField(auto_now_add=True)
    update_date = models.DateField(auto_now=True)

    class Meta:
        verbose_name = '合同'
        verbose_name_plural = "合同"
        ordering = ["create_date"]

    def __str__(self):
        return self.name

 

每一個模型均可以有本身的元數據類,每一個元數據類也只對本身所在模型起做用。app

db_table
指定在數據庫中,當前模型生成的數據表的表名。
db_tablespace
自定義數據庫表空間的名字。
default_related_name
默認狀況下,從一個模型反向關聯設置有關係字段的源模型,咱們使用<model_name>_set,也就是源模型的名字+下劃線+set。

這個元數據選項可讓你自定義反向關係名,同時也影響反向查詢關係名!

from django.db import models

class Foo(models.Model):
    pass

class Bar(models.Model):
    foo = models.ForeignKey(Foo)

    class Meta:
        default_related_name = 'bars'   # 關鍵在這裏

ordering

用於指定該模型生成的全部對象的排序方式,接收一個字段名組成的元組或列表。默認按升序排列,若是在字段名前加上字符「-」則表示按降序排列,若是使用字符問號「?」表示隨機排列。

ordering = ['pub_date']             # 表示按'pub_date'字段進行升序排列
ordering = ['-pub_date']            # 表示按'pub_date'字段進行降序排列
ordering = ['-pub_date', 'author']  # 表示先按'pub_date'字段進行降序排列,再按`author`字段進行升序排列。

unique_together
就是聯合惟一

verbose_name
用於設置模型對象的直觀、人類可讀的名稱。能夠用中文。例如:
verbose_name = "story"
verbose_name = "披薩"

verbose_name_plural
英語有單數和複數形式。這個就是模型對象的複數名,好比「apples」。由於咱們中文一般不區分單複數,因此保持和verbose_name一致也能夠。
相關文章
相關標籤/搜索