说明
字段类型
字段名称 | 字段说明 | 参数 |
---|---|---|
AutoField | 一个根据实际ID自动增长的Integer field 通常不指定(自动创建主键id字段) | primary_key=True |
CharField | varchar类型字段 | max_length存储值的最大长度 |
TextField | longtext类型 长文本 | |
IntegerField | int 类型字段 存储整形 | -2147483648 ~ 2147483647 |
SmallIntegerField | 小整数 | -32768 ~ 32767 |
DecimailField | 存储浮点形 更加精准(存钱) | max_digits=None 位数长度decimal_places=None 小数的位数 |
FloatField | 浮点类型 | |
BooleanField | 存储Bool值 True/False | |
NullBolleanField | 存储 null/True/False | |
DateField | date字段 | auto_now = False 如果对数据进行修改则会自动保存修改的时间auto_now_add=False 会自动添加第一次保存的时间 俩个参数不能同时设置 |
TimeField | time字段 | 参数同上 |
DateTimeField | datetimefield | 参数同上 |
FileField | 单个上传文件的字段 | upload_to = “” 上传文件的保存路径 storage = None 存储组件,默认 |
ImageField | 继承了FileField的所有属性和方法,但对上传的对象进行校验,确保它是个有效的image | upload_to = “” 上传文件的保存路径storage = None存储组件,默认 |
字段选项
通过字段选项,可以实现对字段的约束,在字段对象时通过关键字参数指定
选项 | 说明 |
---|---|
null | 如果设置为True 则当前字段值可以为null |
blank | 如果设置为True 则当前字段可以为空(什么值都没有)值能设置在字符串类型字段 |
db_column | 设置字段名称 不设置 字段名称默认为属性名(db_column=“test”) |
可选参数 | 参数说明 |
db_index | 常规索引(db_index=True) |
unique | 唯一索引(unique=True) |
primary_key | 主键索引(primary_key=True) |
default | 数据库中字段的默认值 |
verbose_name | Admin中显示的字段名称 |
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">User</span><span class="hljs-params">(models.Model)</span>:</span>
<span class="hljs-comment"># 用户名 最大长度20</span>
username = models.CharField(max_length=<span class="hljs-number">20</span>)
<span class="hljs-comment"># 用户密码 最大长度 64</span>
password = models.CharField(max_length=<span class="hljs-number">64</span>)
<span class="hljs-comment"># 性别 默认为True</span>
sex = models.BooleanField(default=<span class="hljs-keyword">True</span>)
<span class="hljs-comment"># 年龄 默认20岁</span>
age = models.IntegerField(default=<span class="hljs-number">20</span>)
<span class="hljs-comment"># 个人简介 最大长度100 默认为info</span>
info = models.CharField(max_length=<span class="hljs-number">100</span>,default=<span class="hljs-string">'info'</span>)
<span class="hljs-comment"># 头像 最大长度为60 默认为 default.jpg</span>
icon = models.CharField(max_length=<span class="hljs-number">60</span>,default=<span class="hljs-string">'default.jpg'</span>)
<span class="hljs-comment"># 是否删除 默认不删除</span>
isDelete = models.BooleanField(default=<span class="hljs-keyword">False</span>)
关系
作用
在模型类中定义Meta类用于设置元信息
示例
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Meta</span>:</span>
db_table = <span class="hljs-string">"user"</span>
ordering = [<span class="hljs-string">"-age"</span>, <span class="hljs-string">"name"</span>]
说明
概念
问题
如果用户被删除(逻辑删除) ,按照目前的查询会将所有用户获取到,很显然不符合逻辑
自定义管理器对象
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">User</span><span class="hljs-params">(models.Model)</span>:</span>
<span class="hljs-comment">#自定义管理器对象,</span>
objects = models.Manager()
username = models.CharField(max_length=<span class="hljs-number">20</span>)
password = models.CharField(max_length=<span class="hljs-number">64</span>)
sex = models.BooleanField(default=<span class="hljs-keyword">True</span>)
age = models.IntegerField(default=<span class="hljs-number">20</span>)
info = models.CharField(max_length=<span class="hljs-number">100</span>,default=<span class="hljs-string">'info'</span>)
icon = models.CharField(max_length=<span class="hljs-number">60</span>,default=<span class="hljs-string">'default.jpg'</span>)
isDelete = models.BooleanField(default=<span class="hljs-keyword">False</span>)
createTime = models.DateTimeField(auto_now_add=<span class="hljs-keyword">True</span>)
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Meta</span>:</span>
db_table = <span class="hljs-string">"users"</span>
ordering = [<span class="hljs-string">"-age"</span>]
注意:如果自定义了管理对象,Django就不会添加objects,但是这两个管理器对象没有任何区别
自定义管理器类
原理
定义Manager类的子类,实现数据的逻辑删除。重写get_queryset()方法,父类中的该方法用户获取所有的数据
实现
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyAppManager</span><span class="hljs-params">(models.Manager)</span>:</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">get_queryset</span><span class="hljs-params">(self)</span>:</span>
<span class="hljs-keyword">return</span> super().get_queryset().filter(isDelete=<span class="hljs-keyword">False</span>)
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">User</span><span class="hljs-params">(models.Model)</span>:</span>
<span class="hljs-comment">#自定义管理器对象,</span>
objects = MyAppManager()
username = models.CharField(max_length=<span class="hljs-number">20</span>)
password = models.CharField(max_length=<span class="hljs-number">64</span>)
sex = models.BooleanField(default=<span class="hljs-keyword">True</span>)
age = models.IntegerField(default=<span class="hljs-number">20</span>)
info = models.CharField(max_length=<span class="hljs-number">100</span>,default=<span class="hljs-string">'info'</span>)
icon = models.CharField(max_length=<span class="hljs-number">60</span>,default=<span class="hljs-string">'default.jpg'</span>)
isDelete = models.BooleanField(default=<span class="hljs-keyword">False</span>)
createTime = models.DateTimeField(auto_now_add=<span class="hljs-keyword">True</span>)
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Meta</span>:</span>
db_table = <span class="hljs-string">"users"</span>
users = User.objects.all()
生成迁移文件
python manage.py makemigrations
执行迁移
python manage.py migrate
使用迁移文件在数据库中生成对应的数据表此刻数据库中已经存在我们的用户表