广州番禺Python, Java小班周末班培训
薯条老师在广州做Python和Java的小班培训,一个班最多10人,学员的平均就业薪资有11K。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Python机器学习,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6
5.6.1 模型中的关系字段
将模型与数据库进行映射时,django会按既定的规则创建数据表的表名,为字段创建索引,规定数据的排序方式等,这里的表名,索引等就是模型的元数据。在定义模型时,可以在其内部定义一个Meta类,以覆盖默认的元数据选项。
5.6.2 定义Meta类
在模型中定义一个Meta类的语法形式:
class ModelName(models.Model): class Meta: pass
覆盖默认的元数据选项,需要在Meta类中以类属性赋值的方式来覆盖Meta选项的值。例如覆盖默认的表名格式,可以通过db_table属性来进行设置。
代码实例:
class Blog(models.Model): class Meta: # 以类属性赋值的方式来覆盖Meta选项的值 db_table = 'blog'
在上文代码中,将模型Blog对应的数据表的表名修改为blog, 如未覆盖db_table选项,django会按以下的格式为数据表进行命名:
appname_modelname
appname表示django应用的名称,modelname表示模型的类型名,二者皆为小写形式。例如django应用名称为blog,模型的类型名为Blog,则数据表名为:blog_blog。
常用的Meta选项:
(1) abstract
abstract属性用来设置该模型是否为抽象基类,将其设置为True时,当前的模型类即为一个抽象基类。在python等面向对象语言中,抽象基类不能进行实例化,只能作为其它模型类的父类。
(2) app_label
app_label属性用来设置当前的模型属于哪一个Django应用。如果定义该模型的Django应用未在INSTALLED_APPS中进行注册时,必须通过app_label属性来进行设置。
代码实例:
class Blog(models.Model): class Meta: # 以类属性赋值的方式来覆盖Meta选项的值 app_label = 'another_chips'
在上文代码中,通过app_label属性来设置模型归属的django应用:Blog模型属于django应用another_chips。
(3) db_table
db_table属性用来定义数据表的表名。
(4) ordering
ordering用来定义数据的排序方式。对从模型中获取的数据进行排序有两种方法:一种是通过QuerySet API,另一种则是通过元数据选项ordering来定义数据排序。使用ordering定义数据排序的语法形式:
ordering = ['-field_name','?field_name','field_name']
field_name表示模型的字段名,字段名前面的-号表示使用降序排序,?表示使用随机排序,无任何前缀符号时表示按升序进行排序。
代码实例:
class Blog(models.Model): modify_time = models.DateTimeField(auto_now = True,verbose_name="修改时间") class Meta: # 以类属性赋值的方式来覆盖Meta选项的值 db_table = 'blog' app_label = 'another_chips' ordering = ['-modify_time']
在上文的代码中,对模型获取数据时,会返回根据modify_time进行降序排序后的结果。
(5) indexes
indexes属性用来给模型中的字段创建索引。
语法形式:
indexes = [models.Index(fields=['field_name','field_name'], name='index_name'),]
field_name表示字段名,index_name表示索引名,在fields参数中添加需创建索引的字段名。
代码实例:
class Blog(models.Model): author = models.DateTimeField(max_length = 20) modify_time = models.DateTimeField(auto_now = True,verbose_name="修改时间") class Meta: # 以类属性赋值的方式来覆盖Meta选项的值 indexes = [ models.Index(fields=['author'], name='IDX_AUTHOR'), models.Index(fields=['modify_time'], name='IDX_MODIFY_TIME'), ]
在上文代码中,分别对字段author以及modify_time创建了索引。
(6) verbose_name
verbose_name同模型字段的可选参数verbose_name,用来定义一个可读的名称。在Meta类中通过verbose_name来为模型定义可读的名称。
代码实例:
class Blog(models.Model): class Meta: # 以类属性赋值的方式来覆盖Meta选项的值 verbose_name = '博客'
(7) constraints
通过constraints属性来为模型字段创建约束,例如字段值约束,唯一约束。对字段值进行约束,使用models中的CheckConstraint类,语法形式:
constraints = [models.CheckConstraint(check=models.Q(query), name=''),]
使用models中的Q对象来构造约束条件,约束条件的使用语法:
field__operator = value
field表示模型字段名,operator表示Q对象中的运算符,Q对象中的比较运算符:
gt 大于
gte 大于等于
lt 小于
lte 小于等于
使用CheckConstraint类来进行字段约束的代码实例:
class Girl(models.Model): age = models.IntegerField() class Meta: # 以类属性赋值的方式来覆盖Meta选项的值 constraints = [ models.CheckConstraint(check=models.Q(age__gte=10), name='age__gte_18'),]
在上述代码中,对模型字段age的值进行了约束, django会确保数据库中的age值恒大于等于10。关于Q对象会在5.6节QuerySet API中进行介绍。对模型字段进行唯一约束,使用models中的UniqueConstraint类型。
UniqueConstraint类的构造形式:
UniqueConstraint(fields=['field', 'field'], name='')
参数fields用来添加需要进行唯一性约束的模型字段,添加多个字段时,表示多个字段的组合也必须是唯一的,name用来定义约束名。使用UniqueConstraint类来进行唯一约束的代码实例:
class User(models.Model): name = models.CharField(max_length = 20) class Meta: # 以类属性赋值的方式来覆盖Meta选项的值 constraints = [ models.UniqueConstraint(fields=['name'], name='UNIQUE_NAME'),]
在上述代码中,将模型中的name字段进行唯一性约束。
5.6.3 最具实力的小班培训
薯条老师在广州做Python和Java的小班培训,一个班最多10人。不在广州的同学可以报名线上直播班,跟线下小班的同学们同步学习。打算参加小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。
(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,包拿Offer
(3) 数据分析高薪就业班,月薪11K-15K, 免费领取课程大纲
(4) Python大数据挖掘,量化投资就业班,月薪12K-25K,免费领取课程大纲
扫码免费领取Python学习资料: