常用字段
更多Field参数请参考官方文档:https://docs.djangoproject.com/zh-hans/2.2/ref/models/fields/
AutoField
- 映射到数据库中是int类型,有自动增长的特性。
- 一般在指定该字段为主键时(主键名称可自定义,非必须id),才会用到该类型。
- 如果不指定主键,那么模型会自动生成一个叫做id的主键。
BigAutoField
- 64位的整型,类似于AutoField。
- 产生的数据的范围是从1-9223372036854775807。
BooleanField
- 在数据库为
tinyint
类型。 - 其在模型中接收的值是
True/False
- 如果没有指定默认值,默认值是None。
CharField
- 在数据库层面是varchar类型,在Python层面就是普通的字符串。
- 该类型在使用时必须要指定最大的长度,也即必须要传递
max_length
参数。
最大长度计算:https://www.cnblogs.com/canger/p/9850727.html
DateTimeField
- 日期时间类型,不仅仅可以存储日期,还可以存储时间。
- 映射到数据库中是
datetime
类型。
```python TIME_ZONE = ‘Asia/Shanghai’
from django.utils.timezone import localtime,now
- auto_now:在每次保存数据时,都使用当前的时间。
- 作为一个记录修改日期的字段,可以将这个属性设置为True。
- auto_now_add:在数据第一次被添加进去时,使用当前的时间。
- 作为一个记录第一次入库的字段,可以将这个属性设置为True。
<a name="EmailField"></a>
### EmailField
- 在数据库底层也是一个varchar类型。
- 类似于CharField,在进行form表单验证时才会起作用。
- 最大长度是254个字符。
<a name="FileField"></a>
### FileField
用来存储文件,一般用于上传文件。
<a name="ImageField"></a>
### ImageField
用来存储图片文件。
<a name="FloatField"></a>
### FloatField
浮点类型,映射到数据库中是float类型。
<a name="IntegerField"></a>
### IntegerField
整型。值的区间是-2147483648——2147483647。
<a name="BigIntegerField"></a>
### BigIntegerField
大整型。值的区间是-9223372036854775808——9223372036854775807。
<a name="PositiveIntegerField"></a>
### PositiveIntegerField
正整型。值的区间是0——2147483647。
<a name="SmallIntegerField"></a>
### SmallIntegerField
小整型。值的区间是-32768——32767。
<a name="PositiveSmallIntegerField"></a>
### PositiveSmallIntegerField
正小整型。值的区间是0——32767。
<a name="TextField"></a>
### TextField
- 大量的文本类型。
- 映射到数据库中是`longtext`类型。
<a name="UUIDField"></a>
### UUIDField
- 只能存储uuid格式的字符串。
- uuid是一个32位的全球唯一的字符串,一般用来作为主键。
<a name="URLField"></a>
### URLField
- 类似于CharField,只不过只能用来存储url格式的字符串。
- 其默认的`max_length`值是200。
<a name="ed5e3120"></a>
## 字段常用参数
<a name="null"></a>
### null
- 默认是为False。若设置为True,Django将会在映射表时指定该字段为空。
- 在使用字符串相关的Field(CharField/TextField)时,官方推荐尽量不使用该参数,也就是保持默认值False。
- Django在处理字符串相关的Field时,即使这个Field的null=False,如果没有给该Field传值,那么Django也会使用一个空的字符串来作为默认值存储进去。
- 如果想要在表单验证时允许该字符串为空,那么建议使用`blank=True`。
- 如果当前Field类型是`BooleanField`,那么对应的可空的字段则为`NullBooleanField`。
<a name="db_column"></a>
### db_column
- 设置该字段在数据库中的名字,即不使用模型中的名字。
- 如果没有设置这个参数,那么将会使用模型中属性的名字。
<a name="default"></a>
### default
- 设置默认值。可以为一个值,或者是一个函数。
- 但是不支持lambda表达式,并且不支持列表/字典/集合等可变的数据结构。
<a name="primary_key"></a>
### primary_key
是否为主键,默认是False。
<a name="unique"></a>
### unique
- 在表中这个字段的值是否唯一。
- 一般多用于设置手机号码/邮箱等。<br />
<a name="a2d5843c"></a>
## 模型中的Meta
用于对一些模型级别的配置。
- 可以在模型中定义一个类,叫做Meta。这个类可以添加一些类属性来控制模型的作用。
- 其可以用`db_table`属性来指定表名,ordering对指定字段来进行排序。<br />
```python
class Book(models.Model):
name = models.CharField(max_length=20,null=False)
desc = models.CharField(max_length=100,name='description',db_column="description1")
class Meta:
db_table = 'book_model'
db_table
- 指定模型映射到数据库中的表名。
如果没有指定这个参数,那么在映射时,会使用app名+模型名来作为默认的表名。
ordering
指定在提取数据时的排序方式。
class Book(models.Model):
name = models.CharField(max_length=20,null=False)
desc = models.CharField(max_length=100,name='description',db_column="description1")
pub_date = models.DateTimeField(auto_now_add=True)
class Meta:
db_table = 'book_model'
ordering = ['pub_date'] # 正序
ordering = ['-pub_date'] # 倒序