元数据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一致也能够。
相关文章
相关标签/搜索