Django2.2 数据库的模块model学习笔记

一、前言

  为什么选用Django2.2,因为从2019年下半年起Django2.2逐渐成为长期支持版本,官网也有数据,所以当然选用维护时间长的版本

二、models的建立

   Django的models也就是你所配置的数据库的表名(Django2.2--mysql连接---https://www.cnblogs.com/cybg/p/11906652.html)

 要注意的是每次的class model建立都需要在控制台执行一次迁移文件----python manage.py migrate

Django2.2 数据库的模块model学习笔记

 2.1 objects.filter()与objects.get()的区别

  .相同点:两者均是从数据表中查询满足条件的数据,----并且两者获取的数据类型均为 Queryset

  .不同点:get()获取到的是一条数据----因此往往需要添加try语句来防止没有数据等情况

       filter()获取到的是多条数据----使用更方便----配合F和操作可以方便的在views层来用for 迭代显示数据

2.2 F与Q运算

  .F运算

  • 可以获取我们属性的值
  • 可以实现一个模型的不同属性的运算操作
  • 还可以支持算数运算

  .Q运算

  • 可以对条件进行封装
  • 封装之后,可以支持逻辑运算

    。与、或、非(&、|、~)

 # companies=Company.objects.filter(c_boys_num__lt=F('c_girls_num')-10)
    # companies=Company.objects.filter(c_boys_num__gt=1).filter(c_girls_num__gt=5)#可用下面的替代
    companies=Company.objects.filter(Q(c_boys_num__gt=1) & Q(c_girls_num__gt=15))#与运算用 &  或运算用 | 表示
    for company in companies:
        print(company.c_name)

 三、模型自定义管理器(模型的显隐性)

  这里先说一下,以下面这个数据表为例,当某条数据需要做删除处理时   ---------------------------(,最好对重要数据做逻辑删除不做物理删除,)

这里有两种操作方式:

  1. 通过F运算或则filter()来判断这条数据属性的布尔值-----------物理性删除------------在views层显示

    

#物理性删除
    # animals=Animal.a_m.filter(is_delete=False)
    animals=Animal.objects.all()

    2.通过模型自定义管理器(查数据非常方便)------不通过系统管理器objects-----------自定义管理器,重写all()系统函数来达到逻辑性删除数据

    

class AnimalManager(models.Manager):
    def get_queryset(self):
        return  super(AnimalManager,self).get_queryset().filter(is_delete=False)class Animal(models.Model):
    a_name=models.CharField(max_length=16)
    is_delete=models.BooleanField(default=False)

    # 模型自定义管理器
    objects=AnimalManager()



-------------------------------------------------
# 模型自定义管理器(模型的显隐性)
    # animals=Animal.a_m.all()

  

Django2.2 数据库的模块model学习笔记

----------这里仅更新了模板的三类查询注意点,并不全----------但数据查询这些基本够用了----------------至于删除,更新---------其实都是基于查询

    下期更新Django2.2模板的各种套用显示------------数据均为Mysql数据库动态数据------------不足的还望指正