前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django 2.1.7 模型类 - 字段类型

Django 2.1.7 模型类 - 字段类型

作者头像
Devops海洋的渔夫
发布2019-06-15 11:18:52
1.7K0
发布2019-06-15 11:18:52
举报
文章被收录于专栏:Devops专栏Devops专栏

上一篇Django 2.1.7 模型 - 使用mysql数据库连接访问讲述了如何使用mysql作为数据库,执行模型查询数据,并返回渲染页面。

本篇章开始将继续看看模型类还可以设置哪些字段类型

参考文献

https://docs.djangoproject.com/zh-hans/2.1/ref/models/fields/

前面篇章设置好的两个模型类

代码语言:javascript
复制
class ServerInfo(models.Model):
    server_hostname = models.CharField(max_length=20, default=None)
    server_intranet_ip = models.CharField(max_length=20, default=None)
    server_internet_ip = models.CharField(max_length=20, default=None)
    server_shelves_date = models.DateField(auto_now_add=True)


# 中间件类:MiddlewareInfo
# 中间件名称: name
# 中间件端口号:port
# 中间件所属服务器:server
class MiddlewareInfo(models.Model):
    name = models.CharField(max_length=20)
    port = models.IntegerField()
    server = models.ForeignKey('ServerInfo',on_delete=models.CASCADE, default=None)

对于模型类的字段类型,还有很多字段类型没有在这两个模型体现出现。下面先来认识一下概念。

在官方文档中,关于字段类型的描述非常多,如下:

模型字段的定义属性

django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列。

默认创建的主键列属性为id,可以使用pk代替,pk全拼为primary key。

注意:pk是主键的别名,若主键名为id2,那么pk是id2的别名。

属性命名限制:

  • 不能是python的保留关键字。
  • 不允许使用连续的下划线,这是由django的查询方式决定的。
  • 定义属性时需要指定字段类型,通过字段类型的参数指定选项,语法如下:
代码语言:javascript
复制
属性=models.字段类型(选项)

字段类型

使用时需要引入django.db.models包,字段类型如下:

  • AutoField:自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性。
  • BooleanField:布尔字段,值为True或False。
  • NullBooleanField:支持Null、True、False三种值。
  • CharField(max_length=字符长度):字符串。
  • TextField:大文本字段,一般超过4000个字符时使用。
  • IntegerField:整数。
  • DecimalField(max_digits=None, decimal_places=None):十进制浮点数。专门用于记录金额。
    • 参数max_digits表示总位数。
    • 参数decimal_places表示小数位数。
  • FloatField:浮点数。
  • DateField[auto_now=False, auto_now_add=False]):日期。
    • 参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为false。
    • 参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为false。
    • 参数auto_now_add和auto_now是相互排斥的,组合将会发生错误。
  • TimeField:时间,参数同DateField。
  • DateTimeField:日期时间,参数同DateField。
  • FileField:上传文件字段。
  • ImageField:继承于FileField,对上传的内容进行校验,确保是有效的图片。

选项

通过选项实现对字段的约束,选项如下:

  • null:如果为True,表示允许为空,默认值是False。
  • blank:如果为True,则该字段允许为空白,默认值是False。
  • 对比:null是数据库范畴的概念,blank是表单验证范畴的。
  • db_column:字段的名称,如果未指定,则使用属性的名称。
  • db_index:若值为True, 则在表中会为此字段创建索引,默认值是False。
  • default:默认值。
  • primary_key:若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用。
  • unique:如果为True, 这个字段在表中必须有唯一值,默认值是False。

编写模型类演示

有了上面关于字段类型的相关说明,下面来丰富一下我这边编写的模型类字段属性,如下:

代码语言:javascript
复制
class ServerInfo(models.Model):
    server_hostname = models.CharField(max_length=20, default=None)
    server_intranet_ip = models.CharField(max_length=20, default=None)
    server_internet_ip = models.CharField(max_length=20, default=None)
    server_shelves_date = models.DateField(auto_now_add=True) # 数据加入时间
    update_time = models.DateTimeField(auto_now=True) # 数据更新时间
    is_delete = models.BooleanField(default=False) # 逻辑删除

class MiddlewareInfo(models.Model):
    name = models.CharField(max_length=20)
    port = models.IntegerField()
    server = models.ForeignKey('ServerInfo',on_delete=models.CASCADE, default=None)
    shelves_date = models.DateTimeField(auto_now_add=True) # 数据加入时间
    update_time = models.DateTimeField(auto_now=True)  # 数据更新时间
    is_delete = models.BooleanField(default=False) # 逻辑删除

class ScriptInfo(models.Model):
    script_name = models.CharField(max_length=20,default=None) # 脚本名称
    script_path = models.CharField(max_length=64,default=None) # 脚本路径
    add_user_id = models.IntegerField() # 添加用户的userid
    shelves_date = models.DateTimeField(auto_now_add=True) # 数据加入时间
    update_time = models.DateTimeField(auto_now=True)  # 数据更新时间
    is_delete = models.BooleanField(default=False) # 逻辑删除

添加了模型中的字段类型之后,执行数据迁移进行变更。

代码语言:javascript
复制
python3 manage.py makemigrations
python3 manage.py migrate

返回mysql查看数据迁移后的表,如下:

代码语言:javascript
复制
mysql> show tables;
+----------------------------+
| Tables_in_assetinfo        |
+----------------------------+
| assetinfo_middlewareinfo   |
| assetinfo_scriptinfo       |
| assetinfo_serverinfo       |
| auth_group                 |
| auth_group_permissions     |
| auth_permission            |
| auth_user                  |
| auth_user_groups           |
| auth_user_user_permissions |
| django_admin_log           |
| django_content_type        |
| django_migrations          |
| django_session             |
+----------------------------+
13 rows in set (0.00 sec)

mysql> 

mysql> desc assetinfo_serverinfo;
+---------------------+-------------+------+-----+---------+----------------+
| Field               | Type        | Null | Key | Default | Extra          |
+---------------------+-------------+------+-----+---------+----------------+
| id                  | int(11)     | NO   | PRI | NULL    | auto_increment |
| server_hostname     | varchar(20) | NO   |     | NULL    |                |
| server_intranet_ip  | varchar(20) | NO   |     | NULL    |                |
| server_internet_ip  | varchar(20) | NO   |     | NULL    |                |
| server_shelves_date | date        | NO   |     | NULL    |                |
| is_delete           | tinyint(1)  | NO   |     | NULL    |                |
| update_time         | datetime(6) | NO   |     | NULL    |                |
+---------------------+-------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)

mysql> 

mysql> desc assetinfo_middlewareinfo;
+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| id           | int(11)     | NO   | PRI | NULL    | auto_increment |
| name         | varchar(20) | NO   |     | NULL    |                |
| port         | int(11)     | NO   |     | NULL    |                |
| server_id    | int(11)     | NO   | MUL | NULL    |                |
| is_delete    | tinyint(1)  | NO   |     | NULL    |                |
| shelves_date | datetime(6) | NO   |     | NULL    |                |
| update_time  | datetime(6) | NO   |     | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+
7 rows in set (0.01 sec)

mysql> 
mysql> select * from assetinfo_middlewareinfo;
+----+-----------+-------+-----------+-----------+----------------------------+----------------------------+
| id | name      | port  | server_id | is_delete | shelves_date               | update_time                |
+----+-----------+-------+-----------+-----------+----------------------------+----------------------------+
|  1 | memcached | 11211 |         1 |         0 | 2019-06-10 14:56:46.150556 | 2019-06-10 14:56:46.241111 |
|  2 | redis     |  6379 |         1 |         0 | 2019-06-10 14:56:46.150556 | 2019-06-10 14:56:46.241111 |
+----+-----------+-------+-----------+-----------+----------------------------+----------------------------+
2 rows in set (0.00 sec)

mysql> 

mysql> desc assetinfo_scriptinfo;
+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| id           | int(11)     | NO   | PRI | NULL    | auto_increment |
| script_name  | varchar(20) | NO   |     | NULL    |                |
| script_path  | varchar(64) | NO   |     | NULL    |                |
| add_user_id  | int(11)     | NO   |     | NULL    |                |
| shelves_date | datetime(6) | NO   |     | NULL    |                |
| update_time  | datetime(6) | NO   |     | NULL    |                |
| is_delete    | tinyint(1)  | NO   |     | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)

mysql> select * from assetinfo_scriptinfo;
Empty set (0.00 sec)

mysql> 

可以看到已有数据在迁移的过程我选择了输入当前时间。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.06.10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考文献
  • 前面篇章设置好的两个模型类
  • 模型字段的定义属性
  • 字段类型
  • 选项
  • 编写模型类演示
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档