Django框架中数据库的字段类型介绍以及使用场景

鳄鱼君

发表文章数:523

Vieu四代商业主题

高扩展、安全、稳定、响应式布局多功能模板。

¥69 现在购买
首页 » Python教程 » Django框架中数据库的字段类型介绍以及使用场景

Django框架基于ORM创建基本类型以及生成数据库结构这篇文章中,我们已经知道了如何创建类,然后根据类生成数据库表结构,这里在进行补充:

from django.db import models

# Create your models here.
class UserInfo(models.Model):  #创建一个类必须继承models.Model
    #django会自动创建一个id列,自增的
    #创建用户名列,字符串类型,指定长度
    username=models.CharField(max_length=32)
    password=models.CharField(max_length=64)
    email=models.CharField(max_length=64) #可以在增加一列数据
    gender=models.CharField(max_length=64,null=True) #可以在增加一列数据,默认为null

如果觉得数据库中的列太少,可以直接修改代码,然后重新运行两条命令:

python manage.py makemigrations
python manage.py migrate

如果注释掉,再次执行命令就会从数据库中消失。我们知道数据库中基本的数据类型有字符串、数字、时间、二进制,这是比较常用的类型,django为我们提供了CharField(字符串)、URLField(字符串)、EmailField(字符串)等等:

表字段 说明
models.AutoField 默认会生成一个名为id的字段并未int类型
models.CharField 字符串类型
models.BooleanField 布尔类型
models.ComaSeparatedIntegerField 用逗号分隔的整数类型
models.DateField       日期(Date)类型
models.DateTimeField   日期(datetime)类型
models.DecimalField   十进制小数类型
models.EmailField 字符串类型(正则表达式邮箱)
models.FloatField   浮点类型
models.IntegerField 整数类型
models.BigIntegerField 长整数类型
models.IPAddressField 字符串类型(IPV4正则表达式)
models.GenericIPAddressField

字符串类型, 参数protocol 可以是: both 、IPv4 和
ipv6 , 验证IP地址

models.NullBooleanField   允许为空的布尔类型
models.PositivelntegerFiel 正整数的整数类型
models.PositiveSmallIntegerField 小正整数类型
models.SlugField

包含字母、数字、下曲线和连字符的字符串, 常用于
URL

models.SmaIlIntegerField 小整数类型, 取值范围C -32,768—+32,767 )
models.TextField 长文本类型
models. TimeField 时间类型, 显东时分秒HH:MM[:ss[ .uuuuuu]]
models. URLField 字符串, 地址为正则表达式
models.B inary F ield 二进制数据类型
参数 说明
null 如为True,字段可以为空
default 设置默认值
primary_key 如为True,将字段设置成主键,一般为id
db_column  列名
db_index 如为True,为字段添加数据库索引
unique 如为True,将字段设置成唯一索引,默认为False
unique_for_data 只对时间做索引
unique_for_month 只对月份做索引
unique_for_year 只对年份做索引
auto_now 更新时自动更新为当前时间
auto_now_add 创建时自动生成时间
choices 在django admin中显示下拉框,避免连表查询
blank 如为True,在django Admin站点管理中添加数据时可以允许空值
verbose_name 在django admin中设置字段的显示名称
aditable 在django admin中字段是否可以被编辑
error_messages 在django admin中显示错误信息
help_text 在django admin中显示帮助信息,提示
validators 在django form中自定义验证机制
related_name 关联对象反向引用描述符,用于多表查询,可解决一个数据表有两个外键同时指向另一个数据表而出现重名的问题

同样都是字符串类型,那么有什么用呢?这些其实是帮助admin认证的,我们可以简单来测试一下效果。默认在pycharm中创建django工程的时候,在工程目录下的urls.py中是有admin/这个规则的:

from django.urls import path,include
from django.contrib import admin
urlpatterns = [
    path('admin/',admin.site.urls),
    path('myapp1/', include("myapp1.urls")), #URL规则为http://127.0.0.1:8000/myapp1,则会交给myapp1.url这个路径匹配
]

然后我们在myapp1下的admin.py文件中添加以下代码:

from django.contrib import admin

from myapp1 import models

admin.site.register(models.UserInfo)

接着运行代码访问:http://127.0.0.1:8000/admin/,但是需要输入用户名和密码,我们没有可以在终端输入命令创建超级用户:

创建超级用户

python manage.py createsuperuser

Username (leave blank to use 'administrator'): root
Email address:
Password:
Password (again):
This password is too short. It must contain at least 8 characters.
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.

输入用户名、 邮箱(可忽略) 、密码

然后我们在django的登陆页面进行登录操作,成功之后会看到:

Django框架中数据库的字段类型介绍以及使用场景

点击ADD添加,我们需要输入用户名和密码,还有邮箱,这里就随便输入测试一下,然后保存,会看到提示:

Django框架中数据库的字段类型介绍以及使用场景

可以看到我们的邮箱不是邮箱格式,所以就报错了,那么models.EmailField虽然也是字符串,但是会控制admin提交数据,其他的字段自己尝试。

对于字段的参数,主要说明一下auto_now和auto_now_add,在创建数据表的时候,我们需要把参数设置为True:

from django.db import models

class UserGroup(models.Model):
    pid=models.AutoField(primary_key=True) #创建一个自增的id 主键 需要设置参数
    caption=models.CharField(max_length=60)
    ctime=models.DateTimeField(auto_now_add=True,null=True) #添加数据时的时间
    utime=models.DateTimeField(auto_now=True,null=True) #修改数据时的时间

我们在更新的时候,要确保数据库中的utime字段的更新,需要使用下面的方法进行,否则不会修改utime的值:

#models.UserGroup.objects.filter(pid=1).update(caption='ceo') #这种方式不会修改ctime
    obj = models.UserGroup.objects.filter(pid=1).first()
    obj.caption = 'haha'
    obj.save()

我们再来看一下choices参数,我们重新创建一张UserInfo表:

from django.db import models

class UserInfo(models.Model):  #创建一个类必须继承models.Model
    #django会自动创建一个id列,自增的
    #创建用户名列,字符串类型,指定长度
    username=models.CharField(max_length=32)
    password=models.CharField(max_length=64)
    user_type_choice=(
        (1,'超级用户'),
        (2,'普通用户'),
        (3,'特价用户'),
    )  #数据库中显示的只是数字,而不是信息
    user_type=models.IntegerField(choices=user_type_choice,default=1) #创建一张数字类型的表,默认1,就是超级用户

这样写是没有问题的,数据库中userinfo表显示的就是数字,信息会显示在内存中,但是在我们admin验证的时候会进行选择,这里自己尝试。对于经常需要修改的信息,我们一般不会存储在存储当中去,而是选择存储在表中。

未经允许不得转载:作者:鳄鱼君, 转载或复制请以 超链接形式 并注明出处 鳄鱼君
原文地址:《Django框架中数据库的字段类型介绍以及使用场景》 发布于2020-04-14

分享到:
赞(1) 赏杯咖啡

评论 抢沙发

3 + 4 =


文章对你有帮助可赏作者一杯咖啡

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.6主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册