之前介绍过模型的字段属性和字段类型。本篇笔记介绍模型的元选项。该选项提供了一些参数,如排序(ordering)、表名(db_table)等,但这些都不是必须的,都是可选的,主要是为用户提供方便和自定义的使用。下面是这个note的目录列表:db_tableget_latest_bymanagedordering1,db_table一般如果我们在创建model的时候不指定表名,makemigration和migrate的时候系统会默认给我们加上表名。规则是:app_name+"_"+model_name的小写。比如一个模型是TestTableName,放在blog应用下,那么迁移时的数据库表名就是:blog_testtablename。注意:以上情况使用的数据库是oracle,表名过长,因为oracle对表名的长度有限制,表名的长度会被截取。而如果我们在Meta中使用db_table参数,我们可以直接指定表名而忽略应用名前缀。下面是一个使用示例:classTestModel(models.Model):passclassMeta:db_table='test_table'然后在执行迁移时,系统会为这个模型创建一个名为test_table的表。以上也是Meta的使用方式。2、get_latest_by默认指定latest()函数使用的字段。先介绍一下latest()函数。这个函数的用法后面会介绍。有一个用法:TestModel.objects.latest('field_name'),这样通过指定字段名,系统就会返回按照字段名field_name排序的TestModel中最新的一条数据。而如果我们在Meta中指定了这个参数,那么我们在使用上述方法时,如在Blog模型中,无需指定字段名,就可以按照我们在Meta中指定的字段名排序返回最新的。指定:classBlog(models.Model):name=models.CharField(max_length=100)tagline=models.TextField()classMeta:get_latest_by="name"然后当我们使用Blog.objects.latest()系统时会得到Sort根据name字段,得到最后一条数据,相当于:Blog.objects.order_by('name').last()如果Meta中没有指定get_latest_by参数,则最后一条数据根据id返回。注意:表中必须有数据,否则会报错。3.当managed参数没有设置时,默认为True。如果为True,则在makemigrations期间将检测到此模型的每个更改。如果该字段为False,则表示Django在进行迁移时会忽略对该表??的检测,常用于只用于系统查询的表。用法如下:classBlog(models.Model):passclassMeta:managed=True4,ordering返回数据的默认字段排序。比如Blog模型,如果我们在Meta中没有设置排序,那么当我们使用Blog过滤数据时,数据会默认按照id的正序返回。如果我们在Meta中设置了ordering参数,那么当我们过滤的时候没有使用order_by()参数的时候,就会按照我们在ordering中设置的字段进行排序。比如当我们设置:classBlog(models.Model):passclassMeta:ordering=["name"]并设置ordering为["name"]时,Blog.objects.first()返回的第一条数据是按名称正序排序后的第一项。如果要倒序排序,只需在字段名前加一个'-'减号:ordering=["-name"]如果要按多个字段排序:ordering=["name","tagline"]以上就是本文笔记的全部内容,接下来的几篇笔记会逐步介绍Django的模型在过滤方面的一些用法,比如filter、exclude、alias、values等。
