# Django模型 ## 一、简介 ​ 模型是Django中用于与数据库进行交互的部分,是定义在models.py文件中的一个类。 - 模型被定义在models.py文件中,数据库中的每张表被映射为models.py中的一个类,并且这个类继承于`django.db.models.Model`类 - 模型中的每个属性都相当于对应表中的字段 - Django对各种支持的数据库进行封装,使一套Django代码可以无缝应用于所有受支持的数据库。 ## 二、代码示例: ```python # app下的models.py文件 from django.db import models class Person(models.Model): first_name = models.CharField(max_lenth=30) last_name = models.CharField(max_length=30) ``` ​ 上面定义了**Person**模型,如果没有特别改变(Meta对象),在数据迁移后,将会生成一个名为**app名.Person**的数据库,并且具备名为**first_name**和**last_name**两个字段。 ## 三、字段类型 | 字段名 | 说明 | |------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------| | AutoField(***options*) | `整型`:如果未指定主键,Django将会由此自动生成一个主键 | | PositiveSmallIntegerField(***options*) | `小整数字段`:`0` to `32767` | | SmallIntegerField(***options*) | `小整数字段`:`-32768` to `32767` | | IntegerField(***options*) | `有符号整型字段`:-2147483648~2147483647 | | PositiveIntegerField(***options*) | `无符号整型`:0~2147483647 | | BigAutoField(***options*) | `64位无符号整型`:设置主键 | | BigIntegerField(***options*) | `64位有符号整型`:默认表单部件为TextInput | | BinaryField(*max_length=None*, ***options*) | `字节字段`:editable属性默认为False | | BooleanField(***options*) | `布尔字段`:默认值为None | | NullBooleanField(***options*) | `布尔字段`:允许为Null | | CharField(*max_length=None*, *options*) | `字符串字段` | | DateField(*auto_now=False*, *auto_now_add=False*, ***options*) | `日期字段`:auto_now=True时,每次修改该模型。将自动设置该字段为当前日期 | | TimeField(*auto_now=False*, *auto_now_add=False*, ***options*) | `时间字段`:用于储存时间 | | DateTimeField(*auto_now=False*, *auto_now_add=False*, ***options*) | `日期时间字段`:储存日期和时间 | | DecimalField(*max_digits=None*, *decimal_places=None*, ***options*) | `浮点型字段`:*max_digits*字段指定最大位数,*decimal_places*指定了小数位数 | | DurationField(***options*) | `持续时间字段`:常用于进行时间运算,存在兼容性问题 | | EmailField(*max_length=254*, ***options*) | `字符字段`:储存前进行邮件地址检查 | | FileField(*upload_to=None*, *max_length=100*, ***options*) | `文件上传字段`:不支持设置为主键,否则将会造成错误 | | FilePathField(*path=None*, *match=None*, *recursive=False*, *max_length=100*, ***options*) | `字符字段`:储存文件路径 | | FloatField(***options*) | `浮点字段` | | ImageField(*upload_to=None*, *height_field=None*, *width_field=None*, *max_length=100*, ***options*) | `图像字段`:继承于FileField字段,但是进行图像是否为空检查 | | GenericIPAddressField(*protocol='both'*, *unpack_ipv4=False*, ***options*) | `字符串字段`:用于储存IP地址 | | SlugField(*max_length=50*, ***options*) | `标称字段`:用于使url更易阅读 | | TextField(***options*) | `文本字段`:用于储存大文本数据 | | URLField(*max_length=200*, ***options*) | `字符字段`:用于储存url | | UUIDField(***options*) | `UUID字段`:用于储存全局唯一数据 | ## 四、Meta选项 ​ Meta选项是定义在模型中的一个类。 [man](https://docs.djangoproject.com/zh-hans/2.1/ref/models/options/)