常用字段
更多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 />```pythonclass 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'] # 倒序
