zoukankan      html  css  js  c++  java
  • 元数据Meta

    元数据,指的是“除了字段外的所有内容”,例如排序方式、数据库表名、人类可读的单数或者复数名等等。所有的这些都是非必须的,甚至元数据本身对模型也是非必须的。

    在模型中增加元数据,需要在模型类中添加一个子类,名字是固定的Meta,然后在这个Meta类下面增加各种元数据选项。

    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

    每个模型都可以有自己的元数据类,每个元数据类也只对自己所在模型起作用。

    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一致也可以。
  • 相关阅读:
    redis 高级
    redis连接
    redis脚本
    Redis事务
    redis发布订阅
    加一
    C语言从代码中加载动态链接库
    GCC编译器
    Vim编辑器基础
    Linux用户的创建与授权及修改密码
  • 原文地址:https://www.cnblogs.com/xiao-apple36/p/11484881.html
Copyright © 2011-2022 走看看