1、字段类型
CharField()
- 数据库类型:varchar
- 注意:必须要指定 max_length 参数值 ```python from django.db import models
Create your models here.
class Category(models.Model):
name = models.CharField(max_length=50, unique=True, verbose_name="分类名称")
# 定义数据表的name字段(最大长度50个字节,唯一)
# 字符串类型,max_length是必填参数
<a name="ZHPip"></a>
## TextField()
- 数据库类型:longtext
- 作用:表示不定长的字符数据
```python
class Article(models.Model):
content = models.TextField(verbose_name="文章内容")
IntegerField()
- 数据库类型:int
- 编程语言和数据库中使用整数
-
BooleanField()
数据库类型:tinyint(1)
- 编程语言中:使用True或False来表示值
-
DateField()
数据库类型:data
- 作用:表示日期
参数
数据库类型:datatime(6)
- 作用:表示日期和时间
-
FloatField()
数据库类型:double
-
DecimalField()
数据库类型:decimal(x,y)
- 编程语言中:使用小数表示该列的值
- 在数据库中:使用小数
参数:
数据库类型:varchar
-
ImageField()
数据库类型:varchar(100)
- 作用:在数据库中为了保存图片的路径
- 编程语言和数据库中使用字符串
- upload_to=’./static’ 指定文件存储位置 (必须存储到数据库后,文件才会落到指定的位置)
2、字段选项
字段选项,指定创建的列的额外的信息
允许出现多个字段选项,多个选项之间使用,隔开
primary_key 主键
如果设置为True,表示该列为主键,如果指定一个字段为主键,则此数据表不会创建id字段
blank 是否可以为空
设置为True时,请求字段可以为空。设置为False时,字段是必须填写的
blank=True 表单 forms 类 就不校验这个参数必传了
null
如果设置为True,表示该列值允许为空
- 默认为False,如果此选项为False建议加入default选项来设置默认值
-
default 默认值
设置所在列的默认值,如果字段选项 null=False 建议添加此项
verbose_name 名称
-
db_index
-
unique 唯一
如果设置为True,表示该字段在数据库中的值必须是唯一(不能重复出现)
db_column
指定列的名称,如果不指定的话则采用属性名作为列名
upload_to=’./static’
-
on_delete 删除时说明(级联删除)
on_delete = models.CASCADE #关联删除,删除关联字段后,该字段也同时删除
- on_delete = models.DO_NOTHING #删除后什么也不做
- on_delete =models.SET #设置成指定的值 例如:models.SET(1) 删除关联字段后,本字段设置成1
- on_delete =models.SET_NULL #设置成null
- on_delete =models.SET_DEFAULT #设置成默认值,前提是你这个字段得有默认值
on_delete =models.PROTECT#受保护 不允许删除
class Account(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE,verbose_name="用户")
money = models.IntegerField(verbose_name="余额",default=90000)
# 模型字段选项
# models.CASCADE cascade
# 关联删除
# models.DO_NOTHING
# 什么也不做
# models.SET 设置成指定的值
# models.SET(1)
# models.SET_NULL #设置成null
# models.SET_DEFAULT #设置成默认值,前提是你这个字段得有默认值
# models.PROTECT#受保护
注意:
删除没有定义键的表中的记录时,有定义键的对应的表的记录 同时会受到影响
删除有定义键的表中的记录时,没有定义键的对应的表中的记录 不会受到影响-
db_constraint 多对多关系,是否建立索引
db_constraint=false ,不会在表里真正建立外键连接
- 优点:提高了数据库查询速度;
- 缺点:不利于数据维护,容易造成垃圾数据。
- db_constraint=true,会在表里真正建立外键
- 优点:有利于数据维护,和数据安全
- 缺点:查询速度较慢
- 用在映射关系是多对多的 ManyToManyField、外键字段选项
3、模型类-Meta类常用属性
使用内部Meta类,来给模型赋予属性,Meta类下有很多内建的类属性,可以对模型类做一些控制
示例:
from django.db import models
# Create your models here.
class Article(models.Model):
title = models.CharField(max_length=80, verbose_name="文章名称")
content = models.TextField(verbose_name="文章内容")
# TextField长文本类型的,它不限制长度
img = models.ImageField(verbose_name="文章图片", null=True, blank=True, upload_to='./static')
# null=True,blank=True 修改默认允许为空
category = models.ForeignKey(Category, on_delete=models.DO_NOTHING, verbose_name="归属分类")
# ForeignKey定义外键
create_time = models.DateTimeField(verbose_name="创建时间", auto_now_add=True)
update_time = models.DateTimeField(verbose_name="修改时间", auto_now=True)
class Meta:
verbose_name = "文章" # 在admin界面上的显示名称
db_table = "category" # 可改变当前模型类对应的表名
# 指定数据库里实际的表名
# 如果不指定,就默认生成表名 appname+classname 即 user_category
verbose_name_plural = verbose_name #verbose_name的复数名字
ordering = ['-update_time', 'id'] # 默认怎么排序
unique_together = ["category", "title"] # 联合唯一
# ordering = ['-update_time', 'id'] # 默认怎么排序
# unique_together = ["category", "title"] # 联合唯一
def __str__(self):
return self.title
verbose_name 名称
- 设置此数据表在admin界面上的显示名称
注意:
该对象的复数形式的名称(复数),用于显示在 /admin 管理界面
db_table 数据表名称
可改变当前模型类对应的表名
- 指定数据库里实际的表名
- 如果不指定,就默认生成表名 appname+classname(应用名+模型类名)
注意:
ordering = [‘update_time’] # 按照updated_time 正序排序
- ordering = [‘-update_time’] # 按照updated_time 倒序排序
ordering = [‘-update_time’, ‘id’] #组合排序,先按照updated_time 倒序排序,再根据id再排序一次
unique_together 联合主键(唯一)
和数据库表结构有关系
- 多个字段联合起来是唯一
- unique_together = [“category”, “title”] # 联合唯一:一个分类下,标题只能由一个相同的