模型常用字段
常用字段
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()
)的时候,都使用当前的时间。类型为True
orFalse
可用于记录修改日期。auto_now_add
:在每次数据第一次被添加进去的时候,都使用当前的时间。类型为True
orFalse
。可用于记录第一次入库的时间。
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 pytz
from datetime import datetime
now = 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`指定时区的时间。
```python
from django.utils.timezone import localtime # 要用到话这样import即可
target_time = localtime(aware_time)