美文网首页django
django-model之元选项

django-model之元选项

作者: 陆_志东 | 来源:发表于2018-08-22 22:35 被阅读80次

在模型类里面可以进行元选项设置.
模型元数据是“任何不是字段的数据”
元选项举例:

from django.db import models

class Ox(models.Model):
    horn_length = models.IntegerField()

    class Meta:
        ordering = ["horn_length"]
        verbose_name_plural = "oxen"

可用的元选项

abstract

如果 abstract = True, 就表示模型是 抽象基类

app_label

如果一个模型位于标准的位置之外(应用的models.py 或models 包),该模型必须定义它属于哪个应用
即:如果你在app应用外定义了模型,你必须要使用app_label来告诉django它属于哪个app应用

app_label = 'myapp'

db_table

该模型所用的数据表的名称:

db_table = 'music_album'

ordering

对象默认的顺序,获取一个对象的列表时会按照这个字段排序:
它是一个字符串的列表或元组。每个字符串是一个字段名,前面带有可选的“-”前缀表示倒序。前面没有“-”的字段表示正序。使用"?"来表示随机排序。
例如:按照pub_date字段的倒序排序,这样写:

ordering = ['-pub_date']

要按照pub_date字段的正序排序,这样写:

ordering = ['pub_date']

注意:排序并不是没有任何代价的操作。你向ordering属性添加的每个字段都会产生你数据库的开销。你添加的每个外键也会隐式包含它的默认顺序。

unique_together 联合唯一索引

这个元数据是非常重要的一个!它等同于数据库的联合约束!
举个例子,假设有一张用户表,保存有用户的姓名、出生日期、性别和籍贯等等信息。要求是所有的用户唯一不重复,可现在有好几个叫“张伟”的,如何区别它们呢?(不要和我说主键唯一,这里讨论的不是这个问题)
我们可以设置不能有两个用户在同一个地方同一时刻出生并且都叫“张伟”,使用这种联合约束,保证数据库能不能重复添加用户(也不要和我谈小概率问题)。在Django的模型中,如何实现这种约束呢?

使用unique_together,也就是联合唯一!
比如:
unique_together = (('name', 'birth_day', 'address'),)
这样,哪怕有两个在同一天出生的张伟,但他们的籍贯不同,也就是两个不同的用户。一旦三者都相同,则会被Django拒绝创建。这一元数据经常被用在admin后台,并且强制应用于数据库层面。

unique_together接收一个二维的元组((xx,xx,xx,...),(),(),()...),每一个元素都是一个元组,表示一组联合唯一约束,可以同时设置多组约束。为了方便,对于只有一组约束的情况下,可以简单地使用一维元素,例如:

unique_together = ('name', 'birth_day', 'address')
联合唯一无法作用于普通的多对多字段。

index_together 联合索引,可以出现相同的数据

用来设置带有索引的字段组合:

index_together = [
    ["pub_date", "deadline"],
]

为了方便起见,当需要处理的字段的集合只有一个的时候(集合只有一个!),index_together可以只用一个中括号。也就是只用一个一维列表。

index_together = ["pub_date", "deadline"]

verbose_name

对象的一个易于理解的名称,为单数:
如果此项没有设置,Django会把类名拆分开来作为自述名,比如CamelCase 会变成camel case,

verbose_name = "pizza"

verbose_name_plural

该对象复数形式的名称:
如果此项没有设置,Django 会使用verbose_name + 's'。

# 一般都是和verbose_name一起使用
verbose_name = "pizza"
verbose_name_plural = verbose_name 

相关文章

  • django-model之元选项

    在模型类里面可以进行元选项设置.模型元数据是“任何不是字段的数据”元选项举例: 可用的元选项 abstract 如...

  • Vue常用功能小笔记

    选项之数据 data methods 选项之DOM el 选项之生命周期钩子 created 指令...

  • 元选项-排序

    在模型类中定义类 Meta,用于设置元信息 ordering :对象的默认排序字段,获取对象的列表时使用,接收属性...

  • Django-model之feild进阶

    参考地址 在model中添加字段的格式一般为: field_name = field_type(**field_...

  • Django的元选项

    模型元选项 1. abstract Options.abstract如果 abstract = True, 就表示...

  • Django-Model

    数据库映射关系:一对一、一对多、多对多 1、一对一案例:账号和联系人 Model from django.db i...

  • Django-model

    DRY对于不同数据源都应该独立存在,减少冗余的数据。 model就是你唯一可信的真实数据源。它包含了你所要存储数据...

  • Models and databases 之四 Meta opt

    元类选项 例如 default_related_name order_with_respect_to

  • 10.17《思考快与慢》前景理论

    问题1:以下选项你会选择哪一个? A. 肯定会得到900元 B. 有90%的可能得到1000元 问题2:以下选项你...

  • 七 Django模型元选项

    元选项(非必须) 数据库元数据就是指定义数据库各类对象结构的数据,是表级操作 1、abstract 说明表示模型是...

网友评论

    本文标题:django-model之元选项

    本文链接:https://www.haomeiwen.com/subject/snjuiftx.html