模型常用字段
常用字段
Django中,定义了一些Field来与数据库表中的字段类型来进行映射。
AutoField
映射到数据库中的是int类型,可以有自动增长的特性。
如果不指定主键,模型会自动生成一个叫做 id的自动增长模型。
该field可以指定名字
BigAutoField
64位的整型,对应数据库的 bigInt,类似 AutoField ,不过产生的数据的范围是从 1~9223372036854775807
BooleanField
在模型层面接收 True或者 False。对应数据库的 tinyint. 如果没有指定默认值,默认值是 None
默认null=False
NullBooleaField
如果要指定null=True,使用NullBooleanField代替。
CharField
对应数据库的 varchar。 在python层面是普通的字符串
必须指定最大的长度(max_length)
如果超过254个字符,不建议使用,而是使用TextFile
DateField
日期类型。python中的datetime。 对应数据库的date
可以传递以下几个参数:
auto_now:在每次这个数据保存(save())的时候,都使用当前的时间。类型为TrueorFalse可用于记录修改日期。auto_now_add:在每次数据第一次被添加进去的时候,都使用当前的时间。类型为TrueorFalse。可用于记录第一次入库的时间。
DateTimeField
日期时间类型。可以存储日期和时间。对应数据库中的datetime类型。
同样也有auto_now和auto_now_add属性
TimeField
时间类型。对应数据库的time。在python中是datetime.time类型
EmailField
- 类似于
CharField.在数据库底层也是一个varchar类型。默认长度是254个字符。- 在数据库层面无限制。但是在
ModelForm等表单相关操作的时候会起作用
- 在数据库层面无限制。但是在
FiledField
- 用来存储文件的
ImageField
- 用来存储图片文件的。
FloatFiled
- 浮点类型。对应数据库的
float
IntegerField
- 整型。区间是(-2) ~ 2 -1
BigIntegerField
- 大整型。区间是 (-2) ~ 2 -1
PositiveIntegerField
- 正整型。区间是 0 ~ 2 -1
SmallIntegerField
- 小整型。区间是 (-2) ~ 2 -1
PositiveSmallIntegerField
- 正小整型。区间是 0 ~ 2 -1
TextField
- 大量的文本类型。 对应数据库的
longtext
UUIDField
- 只能存储
uuid格式的字符串。uuid是一个32位的全球唯一的字符串。一般用来作为主键。
URLField
- 类似
Charfield,只能用于存储url格式的字符串。默认的max_length为200
navie时间和aware时间
- navie时间: 幼稚。不知道自己的时间表示的是哪个时区。
- aware时间:清醒的。知道自己的时间表示的是哪个时区。
pytz库:
- 专门用来处理时区的库。这个库会经常更新一些时区的数据。安装
Django默认安装。
astimezone方法
- 将一个时区的时间转换为另外一个时区的时间。
- 只能被
aware类型的时间调用。不能被navie类的时间调用import pytzfrom datetime import datetimenow = datetime.now() # 这是一个navie类型的时间utc_timezone = pytz.timezone("UTC") # 定义UTC的时区对象utc_now = now.astimezone(utc_timezone) # 将当前的时间转换为UTC时区的时间>> ValueError: astimezone() cannot be applied to a navie datetime# 抛出一个异常。navie类型的时间不能调用astimezone方法now = now.replace(tzinfo=pytz.timezone('Asia/Shanghai')) # 修改属性,变成一个aware时间类型utc_now = now.astimezone(utc_timezone)# 就可以正确调用astimezone()
replace方法
- 可以将一个时间的某些属性进行更改
django.utils.timezone.now
- 在
settings.py中,如果USE_TZ = True,则now()返回aware类型的UTC时间.如果没有设置,则返回navie类型的时间。 ```python from django.utils.timezone import now # 要用到话这样import即可
now()
<a name="django.utils.timezone.localtime"></a>##### django.utils.timezone.localtime- 根据`setting.py`中的`TIME_ZONE`来将一个`aware`类型的时间转换为`TIME_ZONE`指定时区的时间。```pythonfrom django.utils.timezone import localtime # 要用到话这样import即可target_time = localtime(aware_time)
