Django - 模型层 - 模型字段

模型字段fields

字段命名约束

  • 与python关键字冲突
  • 字段名中不能有两个以上下划线在一起
  • 字段名不能以下划线结尾

模型字段

类型说明
AutoField一个自动增加的整数类型字段。通常你不需要自己编写它,Django会自动帮你添加字段:id = models.AutoField(primary_key=True),这是一个自增字段,从1开始计数。如果你非要自己设置主键,那么请务必将字段设置为primary_key=True。Django在一个模型中只允许有一个自增字段,并且该字段必须为主键!
BigAutoField64位整数类型自增字段,数字范围更大,从1到9223372036854775807
BigIntegerField64位整数字段(看清楚,非自增),类似IntegerField ,-9223372036854775808 到9223372036854775807。在Django的模板表单里体现为一个NumberInput标签。
BinaryField二进制数据类型。较少使用。
BooleanField布尔值类型。默认值是None。在HTML表单中体现为CheckboxInput标签。如果设置了参数null=True,则表现为NullBooleanSelect选择框。可以提供default参数值,设置默认值。
CharField最常用的类型,字符串类型。必须接收一个max_length参数,表示字符串长度不能超过该值。默认的表单标签是text input。
DateFieldclass DateField(auto_now=False, auto_now_add=False, **options) , 日期类型。一个Python中的datetime.date的实例。在HTML中表现为DateInput标签。在admin后台中,Django会帮你自动添加一个JS日历表和一个“Today”快捷方式,以及附加的日期合法性验证。两个重要参数:(参数互斥,不能共存) auto_now:每当对象被保存时将字段设为当前日期,常用于保存最后修改时间。auto_now_add:每当对象被创建时,设为当前日期,常用于保存创建日期(注意,它是不可修改的)。设置上面两个参数就相当于给field添加了editable=False和blank=True属性。如果想具有修改属性,请用default参数。例子:pub_time = models.DateField(auto_now_add=True),自动添加发布时间。
DateTimeField日期时间类型。Python的datetime.datetime的实例。与DateField相比就是多了小时、分和秒的显示,其它功能、参数、用法、默认值等等都一样。
DecimalField固定精度的十进制小数。相当于Python的Decimal实例,必须提供两个指定的参数!参数max_digits:最大的位数,必须大于或等于小数点位数 。decimal_places:小数点位数,精度。 当localize=False时,它在HTML表现为NumberInput标签,否则是textInput类型。例子:储存最大不超过999,带有2位小数位精度的数,定义如下:models.DecimalField(…, max_digits=5, decimal_places=2)。
DurationField持续时间类型。存储一定期间的时间长度。类似Python中的timedelta。在不同的数据库实现中有不同的表示方法。常用于进行时间之间的加减运算。但是小心了,这里有坑,PostgreSQL等数据库之间有兼容性问题!
FloatField浮点数类型,对应Python的float。参考整数类型字段。
IntegerField整数类型,最常用的字段之一。取值范围-2147483648到2147483647。在HTML中表现为NumberInput或者TextInput标签。
GenericIPAddressFieldclass GenericIPAddressField(protocol=‘both’, unpack_ipv4=False, **options),IPV4或者IPV6地址,字符串形式,例如192.0.2.30或者2a02:42fe::4。在HTML中表现为TextInput标签。参数protocol默认值为‘both’,可选‘IPv4’或者‘IPv6’,表示你的IP地址类型。
JSONFieldJSON类型字段。Django3.1新增。签名为class JSONField(encoder=None,decoder=None,**options)。其中的encoder和decoder为可选的编码器和解码器,用于自定义编码和解码方式。如果为该字段提供default值,请务必保证该值是个不可变的对象,比如字符串对象。
PositiveBigIntegerField正的大整数,0到9223372036854775807
PositiveIntegerField正整数,从0到2147483647
PositiveSmallIntegerField较小的正整数,从0到32767
SlugFieldslug是一个新闻行业的术语。一个slug就是一个某种东西的简短标签,包含字母、数字、下划线或者连接线,通常用于URLs中。可以设置max_length参数,默认为50。
SmallAutoFieldDjango3.0新增。类似AutoField,但是只允许1到32767。
SmallIntegerField小整数,包含-32768到32767。
TextField用于储存大量的文本内容,在HTML中表现为Textarea标签,最常用的字段类型之一!如果你为它设置一个max_length参数,那么在前端页面中会受到输入字符数量限制,然而在模型和数据库层面却不受影响。只有CharField才能同时作用于两者。
TimeField时间字段,Python中datetime.time的实例。接收同DateField一样的参数,只作用于小时、分和秒。
URLField一个用于保存URL地址的字符串类型,默认最大长度200。
UUIDField用于保存通用唯一识别码(Universally Unique Identifier)的字段。使用Python的UUID类。在PostgreSQL数据库中保存为uuid类型,其它数据库中为char(32)。这个字段是自增主键的最佳替代品,后面有例子展示。

FileField

class FileField(upload_to=None, max_length=100, **options)
  • 上传文件字段 (不能设置为主键). 默认最大长度100, 可以通过max_length参数自定义.
  • upload_to用于设置上传地址的目录和文件名

当访问一个模型对象中的文件字段时, Django会自动给我们提供一个FieldFile实例进行文件操作

  • FieldFile.name : 获取文件名
  • FieldFile.size : 获取文件大小
  • FieldFile.open(model=‘rb’) : 以类似Python文件操作的方式, 打开文件
  • FieldFile.close() : 关闭文件
  • FieldFile.save(name, content, save=True) : 保存文件

ImageField

class ImageField(upload_to=None, height_field=None, width_field=None, max_length=100, **options)

使用Django的ImageField需要提前安装pillow模块

使用FileField或者ImageField字段的步骤

  1. 在setting中配置MEDIA_ROOT, 作为上传文件在服务器中的基本路径. 再配置MEDIA_URL, 作为公用URL, 指向上传文件的基本路径
# 配置media
MEDIA_URL = '/meida/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

FilePathField

class FilePathField(path='', match=None, recursive=False, allow_files=True, allow_folders=False, max_length=100, **options)

一种用来保存文件路径信息的字段, 在数据表内以字符串的形式存在

它包含下面一些参数 :

  • path : 必须指定的参数, 表示一个系统绝对路径, path通常是个字符串
    match : 可选参数, 一个正则表达式, 用于过滤文件名.
    recursive : 可选参数, 只能是Ture或者False. 决定是否包含子目录.

使用 :

import os
from django.conf import settings
from django.db import models

def images_path():
    return os.path.join(settings.LOCAL_FILE_DIR, 'images')

class MyModel(models.Model):
    file = models.FilePathField(path=images_path)

UUIDField

使用

import uuid
from django.db import models

class MyUUIDModel(models.Model):
	id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值