🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
~~~python # 进入包含有 manage.py 的文件夹 python manage.py makemigrations python manage.py migrate ~~~ ``` \# class Person(models.Model):   \#     # 表的字段信息都可以在代码中取到。 \#     # 取到Person表所有的fields: fields = Person.\_meta.fields \#     # 取所有字段的 verbose\_name     \#     # verbose\_name\_list = \[field.verbose\_name for field in fields\]       \#     # 字段名:field.name,     \#     # 字段的值:getattr(Person, field.name)     \#     # verbose\_name 是 字段备注信息,help\_text 是 字段补充说明, \#     age = models.IntegerFiedl(null=True, verbose\_name="这是年龄")   \#     class Meta:         \#         # 表备注         \#         verbose\_name = "个人信息表" \# 通过上面的介绍我们知道 Meta 类的作用就是用于定义 Model 的元数据,即不属于 Model 的字段,但是可以用来标识字段一些属性,下面我们介绍 Meta 定义的常见元数据以及如何在 Model 中使用它们。 \# 1) abstract \# 一个布尔类型的变量。这个属性是定义当前的模型是不是一个抽象类。所谓抽象类是不会对应数据库表的。一般我们用它来归纳一些公共属性字段,然后继承它的子类可以继承这些字段。如果 abstract = True 这个 model 就是一个抽象类。 \# 2) ordering \# 用于执行获取对象列表时的排序规则。它是一个字符串的列表或元组对象,它的使用格式是由代表字段的字符串和一个表明降序的'-'构成。当字段名前面没有'-'时,将默认使用升序排列。使用'?'将会随机排列。示例如下所示: \# ordering=\["add\_time"\] #按照升序排序 \# ordering=\["-add\_time"\]#按照降序 \# ordering=\["?add\_time"\]#随机排序 \# #同时指定多个字段来进行排序 \# ordering=\['add\_time','-last\_login\_time'\]#先按升序,在按降序 \# 3) verbose\_name\_plural \# 这个元数据主要用在管理后台的展示上,verbose\_name\_plural 是模型类的复数名 。如果不设置的话,Django 会使用小写的模型名作为默认值,并且在结尾加上 s。通过此项元数据设置名字可以去掉 s。 可参见《Django Admin数据表可视化》一节。 \# 4) db\_table \# 这个字段用于指定数据表的名称,通常没有特别需求,将按照 Django 默认的规则生成 Model 对应的数据库表名。 \# #定义该model在数据库中的表名称 \#   db\_table = 'Students' \# #使用自定义的表名,可以通过以下属性 \#   table\_name = 'my\_owner\_table' \# 5) app\_lable \# 这个选项只在一种使用情形,就是你的模型不在默认的应用程序包下的 models.py 文件中,这时候需要指定你这个模型是哪个应用程序的 app\_label = 'app\_name'。 \# 6) managed \# 它是一个布尔类型的变量,默认为 Ture,代表 Django 会管理数据的生命周期,即利用 Django 提供的 syncdb 和 reset 命令可以完成创建和删除数据表。如果为 False,则不会对此模型执行数据库表创建或删除操作。比如数据表之间存在 ManyToMany 的关系,在指定为 managed=False 的情况下,Django 不会自动创建中间表,需要我们自己手动创建。 \# 7) indexs \# 它是一个列表类型的元数据项,用来定义 Model 的索引,列表中的每一个元素都是 Index 类型的实例。 \# Index 引自 django.db.models.indexes.Index \# 8) default\_permissions \# Django 默认会给每一个定义的 Model 设置三个权限即添加、更改、删除,它使用格式:default\_permissions=('add','change','delete','view') \# 9) permissions \# 除了 Django 默认给 Model 添加的三个权限之外,还可以通过 permisssions 给 Model 添加额外的权限。不过 permissions 是一个包含二元组的元组或者列表,所以使用时应该注意格式,即 permissions=\[(权限代码,权限名称)\],示例如下所示: \# permissions = \[(have\_read\_permission', '有读的权限')\] \# 10) unique\_together \# 这个选项用于下面情形:当你需要通过两个字段保持唯一性时使用。比如用户的姓名(name)和 身份证号码(ID number)两者的组合必须是唯一的,那么需要这样设置: \# unique\_together = (("first\_name", "last\_name"),) \# 一个 ManyToManyField 不能包含在 unique\_together 中。如果你需要验证 ManyToManyField 字段的唯一验证,尝试使用 through 属性进行关联。 \# 11) proxy \# 默认值为为 False, 如果设置成 Ture,则表示为基类、父类的代理模型。这个选项在后续章节还会进行相关介绍,它的主要作用就是创建父模型的代理模型。 \# 12) db\_tablespace \# 表空间,用于优化数据库性能,常用于 Oracle、PostgerSQL 数据库。MySQL 数据库不支持表空间,所以当数据存储后端数据库不支持的时候,Django 会在自动忽略这个元数据选项。 \# 13) get\_latest\_by \# 指定一个 DateField 或者 DateTimeField 字段的名字,即 model 的属性名字。使用示例如下: \# get\_latest\_by = "order\_date" \# 这个设置让你在使用模型管理器的 lastest() 方法时,默认使用order\_date指定字段来排序。 \# 14) order\_with\_respect\_to \# 这个选项一般用于多对多的关系中,它指向一个关联对象并将该对象进行排序,使用元数据项后你会得到一个 get\_xxx\_order() 和set\_xxx\_order() 的方法,通过它们你可以设置或者得到排序的对象。 \# AutoField 自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性 \# BooleanField  布尔字段,值为True或False \# NullBooleanField  支持Null、True、False三种值 \# CharField 字符串,参数max\_length表示最大字符个数 \# TextField 大文本字段,一般超过4000个字符时使用 \# IntegerField  整数 \# DecimalField  十进制浮点数, 参数max\_digits表示总位数, 参数decimal\_places表示小数位数 \# FloatField    浮点数 \# DateField 日期, 参数auto\_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为False; 参数auto\_now\_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为False; 参数auto\_now\_add和auto\_now是相互排斥的,组合将会发生错误 \# TimeField 时间,参数同DateField \# DateTimeField 日期时间,参数同DateField \# FileField 上传文件字段 \# ImageField    继承于FileField,对上传的内容进行校验,确保是有效的图片 ``` 以上是一些注解 代码示例: ```from django.db import models #定义图书模型类BookInfo class BookInfo(models.Model): btitle = models.CharField(max_length=20, verbose_name='名称') bpub_date = models.DateField(verbose_name='发布日期') bread = models.IntegerField(default=0, verbose_name='阅读量') bcomment = models.IntegerField(default=0, verbose_name='评论量') is_delete = models.BooleanField(default=False, verbose_name='逻辑删除') class Meta: db_table = 'tb_books' # 指明数据库表名 verbose_name = '图书' # 在admin站点中显示的名称 verbose_name_plural = verbose_name # 显示的复数名称 def __str__(self): """定义每个数据对象的显示信息""" return self.btitle #定义英雄模型类HeroInfo class HeroInfo(models.Model): GENDER_CHOICES = ( (0, 'male'), (1, 'female') ) hname = models.CharField(max_length=20, verbose_name='名称') hgender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name='性别') hcomment = models.CharField(max_length=200, null=True, verbose_name='描述信息') hbook = models.ForeignKey(BookInfo, on_delete=models.CASCADE, verbose_name='图书') # 外键 is_delete = models.BooleanField(default=False, verbose_name='逻辑删除') class Meta: db_table = 'tb_heros' verbose_name = '英雄' verbose_name_plural = verbose_name def __str__(self): return self.hname ```