模型Models
数据模型
模型的字段类型
- CharField(max_length=):字符串类型,参数为长度
- Boolean field():布尔类型
- DateField():日期类型,年月日
- DateTimeField():时间类型,年月日时分秒
- auto_now_add:第一次创建的时候赋值
- auto_now:每次修改时候赋值
- AutoField():自增类型
- IntegerField():整数类型
- FloatField():浮点数类型
- FileField():文件类型
- ImageField(upload_to=)图片类型,存储路径,参数是路径
- 依赖于
pillow
模块 - 设置
MEDIA_ROOT
- 依赖于
- TextField():文本类型
- DecimalField():固定精度小数
- max_digits:总位数
- decimal_places:小数后几位
MEEDIA_ROOT的设置,例如存储用户头像icon,在settings.py中添加其路径:
MEDIA_ROOT = os.path.join(BASE_DIR, 'static/icons')
在模型中定义字段类型和限制为image文件:
class UserModel(models.Model):
username = models.CharField(max_length=32)
# upload_to=后面是根据时间生成的路径,在静态文件文件夹里面
icon = models.ImageField(upload_to="%Y-%M-%D")
当然,我们也可以不用ImageField()
属性,自定义存储的位置,然后将路径存储到数据库中
模型参数
- default:默认值
- null:是否为空,存储有关,创建记录时可以不传值,用NULL填充
- blank:是否为空,校验有关,创建记录时可以为空字符串,不允许前端传空字符串,否则400
- primary_key:主键,有自增属性
- unique:唯一约束,可以有多个null
属性
数据模型的属性分为显性属性和隐形属性
显性属性包括开发主动声明的模型的属性和方法,还有从父类中继承来的属性和方法。
隐性属性是开发这未声明,自动生成的属性,开发者声明了就不自动生成了
例如模型的objects属性,是一个隐性属性,不需要开发者声明,自动生成,直接调用进行查询过滤,是一个manager实例,用来创建管理模型。
重写这个实例,实现对数据库数据的过滤,使返回的结果只包含没有被逻辑删除的结果。首先创建一个新的manager类,继承自Manager,重写他的get_queryset()
方法,实现过滤功能。
class LearnManager(Manager):
# 重写查询结果集,对数据进行过滤
def get_queryset(self):
queryset = super().get_queryset().filter(is_delete=Flase