资讯专栏INFORMATION COLUMN

django开发之model篇-Field类型讲解

glumes / 773人阅读

摘要:今天介绍一下开发中,定义模型时用到的相关字段类型和字段选项。的实例是作为类型保存到数据库中的,默认字符串的最大长度是,但是可以使用参数指定最大长度。浮点类型,用中的实例表示整数类型。关于的字段类型和参数就先讲到这里。

今天介绍一下django开发中,定义模型时用到的相关字段类型和字段选项。

先说说常用的字段类型:
1) AutoField: 自增字段类型,当自定义自增类型的id时,可以使用此类型;
2) BigAutoField: 64位的整数自增类型;
3) BigIntegerField: 64位的整数类类型;
4) BinrayField: 字节类型的二进制数据;
5) BooleanField: 布尔类型;
6) CharField: 字符串类型,使用时必须指定max_lenth这个参数;
7) DateField: 日期类型,在python中datetime.date的实例就相当于该类型。该类型有两个字段选项auto_now和auto_now_add需要说一下。在django官方文档中的说明中,auto_now表示当对象被保存后,该字段会自动设置为当前时间,适用于需要保存对象的最后修改时间的场景。auto_now_add表示当对象第一次被创建后,该字段会自动设置为当前时间,适用于保存对象创建时间的场景。
8) DateTimeField: 时间类型,在python中datetime.datetime的实例就相当于该类型。同样的,这个字段中也有auto_now和aito_now_add这两个参数;
9) TimeField: 时间类型,python中datetime.time的实例可以表示此类型,
10) DecimalField: 数字类型,python中的Decimal实例就相当于此类型。有两个必须的参数,max_digits表示数字整数部分和小数部
分共有多少位,decimal_places表示精度,即小数部分的位数

test_decimal = models.DecimalField(max_digits=5, decimal_places=2)  # 3位整数,2位小数

11) DurationField: 存储时间段的类型,即表示两个时间的差值,在python中可以用timedelta表示;
12) EmailField: 一个字符串,但是会使用EmailValidator验证form中输入的字符串是否符合邮件的格式;
13) FileField: 文件上传类型的字段,必须要有upload_to这个参数,上传的文件会保存在upload_to指定的路径中

test_file1 = models.FileField(upload_to="uploads/")           # 上传的文件保存到uploads中
test_file2 = models.FileField(upload_to="uploads/%Y/%m/%d")   # 上传的文件保存到uploads/2018/08/18中

其中,upload_to的值还可以是一个回调函数:

def func_file(instance, filename):
    return "user_{0}/{1}".format(instance.user.id, filename)
    
test_file3 = models.FileField(upload_to=func_file)

14) ImageField: 图片类型的字段,可以用在使用头像的场景中;与FileField一样,它也有upload_to参数,需要指定一个上传的路径。使用该字段时,项目中需要安装Pillow库。ImageField的实例是作为varchar类型保存到数据库中的,默认字符串的最大长度是100,但是可以使用max_length参数指定最大长度。
15) TextField: 文本类型的字段,对于超出CharField类型存储范围的数据,可以定义为该类型;
16) UUIDField: 使用python中UUID类生成该字段的值,生成一个通用唯一的标识符,该类型可以代替自增id做主键

user_id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

其中,default参数可以指定,uuid4是uuid的一个版本,即uuid的生成方式,还有其它的版本。
17) FloatField: 浮点类型,用python中的float实例表示;
18) IntegerField: 整数类型。

下面说说常用的字段选项:
1)default: 该参数可以指定字段的默认值,一般直接指定默认值即可;但是,该参数的值还可以是一个函数名,可用于订单号等特殊字符串的生成;用法如下:

def generate_order_id():
   """ 此处可以编写生成订单号的逻辑 """
   ......

order_id = models.CharField(max_length=32, default=generate_order_id)

通过以上代码,每创建模型中的一条数据时,order_id就会根据你编写的逻辑自动生成,这样大大增加了字段值的灵活性;
2)primary_key: 如果参数值为True,表示指定该字段是主键;当模型中没有使用这个参数时,django会自动添加一个int型的自增id作为主键;
3)null: 如果参数值为True,该字段在数据库中的值是NULL,该参数默认值是False;
4)blank: 如果参数值是True,表示这个字段值在前端页面的表单中允许填空值,注意与null的区别;
5)auto_now和auto_now_add在上面讲解过,这里不再说明了;
6)choices: 该参数的值是一个可迭代的对象,看一下例子:

class UserModel(models.Model):
    user_type = (
        (1, "中学生"),
        (2, "大学生"),
        (3, "研究生"),
    )
    user_type = models.IntegerField(choices=user_type)

上面的代码中,choices的值是一个元祖(当然也可以是列表),在数据库中存储的形式是1、2、3,但是在前端表单中显示的结果是中学生、大学生、研究生;一些表示类型、爱好等具有分类意义的字段时可以使用这个参数;
7)help_text: 显示在页面表单中的一段说明性文字,可以用于对该字段的解释说明;
8)verbose_name: 给字段指定一个更详细的名字;ForeignKey、ManyToManyField 和OneToOneField,字段默认的verbose_name值就是字段的名称,如果显式指定,只需写在第一个位置即可,如:

user = models.CharField("user_name", max_length=32)

user字段的verbose_name就是user_name;
当字段是ForeignKey、ManyToManyField或者OneToOneField类型时,想使用这个参数必须加上verbose_name,如:

user = models.ForeignKey(UserModel, to_field="user_id", verbose_name="user_name")

因为当字段是ForeignKey、ManyToManyField或者OneToOneField这三种类型时,第一个参数必须是关联的模型类;
9)unique: 如果值该参数为True,则数据库中这个字段的值必须唯一,且不能为空;
10)db_index: 如果该字段值为True,则在数据库中,将会在该字段上创建索引。

关于Field的字段类型和参数就先讲到这里。如果错误之处,欢迎交流指正!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42312.html

相关文章

  • 利用Django通用类视图(class-based view)编写数据驱动(ModeForm)WEB

    摘要:既然是数据驱动的,首先就必须要有数据。也符合它用于查看数据的需求。说明模板中的对象就是从中取出的数据。以的类型存储着所有数据。修改视图接下来就是第二类修改视图了。其中的会将中的该字段设为类型而则是带有清除文件功能的类型。 最近在学习Django,官方文档介绍地十分详细。但是大而全就难免会有些不够速成,和我们这个浮躁的互联网时代格格不入,所以我就整理了这个文档。就像coolshell说的...

    CarterLi 评论0 收藏0
  • 「Odoo 基础教程系列」第二——从 Todo 应用开始(1)

    摘要:虽然这是个很简单的应用,但是希望大家可以动手一起操作,从最简单的开始上手学习如何使用这个框架。则是在和之间,负责响应用户操作,从中获取数据进行处理并返回到中。 showImg(https://segmentfault.com/img/bV66tE?w=728&h=410); 在第一篇教程发布之后差不多一个月的今天,终于完成了第二篇内容,这个发布周期拖得实在是有点太长了,我都觉得不好意思...

    UCloud 评论0 收藏0
  • Django Model View Template 间的简单交互 (二)

    摘要:当然还有其他高级的使用,日后再说完整的用户名邮箱联系地址留言信息用户留言信息使用之前已经定义好了数据模型的字段元数据方法等。 前言 接续前文,上一篇文章主要涉及了 Django 项目的基础配置等,这篇主要涉及数据库相关的 ORM ,也就是 Django 中的 Model 的使用,MVT 三层之间的交互 教程基本都是东拼西凑的,防止有些东西表述不准确,因为我之前写 JavaScript ...

    Coding01 评论0 收藏0
  • Django基础六(模型理论知识)

    摘要:在模型中添加是完全可选的,所有选项都不是必须的。一个模型的数据库表名称,由这个模型的应用名和模型类名称之间加上下划线组成。使用来表示随机排序。默认值为这个选项为时可以对数据库表进行或删除等操作。 Django模型理论知识 简介 Django模型所在的位置: URL--->视图--->模型(mysql) 什么是模型: 模型就是数据的唯一的&权威的信息源 包含所存储的诗句的必要字段和...

    lmxdawn 评论0 收藏0
  • Django添加全文搜索功能入门

    摘要:转载说明来源添加全文搜索功能入门一使用的工具是的开源搜索框架,该框架支持搜索引擎,不用更改代码,直接切换引擎,减少代码量。修改如下添加修改为如下第二步在中修改引擎,如下第三步重建索引,在进行搜索中文试试吧。 感觉网络上关于Django全文搜索的中文文章太少,并且讲的也不是很到位,就是简单介绍了怎么配置,并没有说这样配置有什么用,所以依然很迷茫。所以希望我这篇文章能够帮助到后来人。 转...

    lookSomeone 评论0 收藏0

发表评论

0条评论

glumes

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<