Django学习记录--Django模型管理器类的使用
2020-06-05 09:54
183 查看
在Django中
我们可以通过模型管理器类中的方法进行对模型类对应的数据表进行操作
比如:
我们定义了一个模型类的叫做
class TestInfo(models.Model): pass
那么我们在通过模型类查询数据的时候就用以下这种方式进行查询
# 查询模型类映射的表中所有的数据,返回一个查询结果集 TestInfo.objects.all() # 这里的objects就是模型管理器创建对象,用来操作模型类的一个管理器
下面记录两种继承模型管理器类的用法
一、改变查询的结果集
通常在数据库中,数据不会被真正的删除,而是通过一个标记字段,进行软删除。
那么我们可以自己定义一个类继承于models.Manager,通过修改父类方法,将标记为删除的字段不进行显示
代码
from django.db import models # Create your models here. class TsetManager(models.Manager): """ 模型管理器类 """ # 用途 改变查询结果集 def all(self): # 1.调用父类all方法获取所有的数据test test = super().all() # 对查询结果集再次进行操作,找出isdelete = False的数据 test = test.filter(isdelete = False) # 返回再次操作后的结果集 return test class TestInfo(models.Model): """ 模型类 """ # 名称 title = models.CharField(max_length=30) # 日期 tdate = models.DateField() # 逻辑删除,数据库中不做真正删除,只做删除标记,也可称为软删除 isdelete = models.BooleanField(dtestefault=False) # 在模型类中创建一个模型管理器对象 # 自定义manager对象,管理器 类似 TestInfo.objects.xxx # 只是此时的objects 换成 了test # test = models.manager() # 用继承models.Manager的TestManager类创建管理器 test = TestManager()
二、通过模型管理器实现对模型类对应表进行操作
在我们获取模型类对象后,可以通过这种方式给模型类对应的数据表插入数据
TestInfo.title = 'test' TestInfo.tdate = '2010-2-2' TestInfo.save()
那么此时,我们可以将上面的方式进行封装,放到我们创建的模型管理器子类中
from django.db import models # Create your models here. class TsetManager(models.Manager): """ 模型管理器类 """ # 封装函数 通过 模型管理器实现对模型类对应表进行操作 def create_new_test(self, title, tdate): # 创建一个模型类对象 我们需要通过模型类对象对数据表进行操作 # 就像 TestInfo.title = xxxx test = TestInfo() test.title = title test.tdate = tdate test.save() # 返回模型类对象 return test class TestInfo(models.Model): """ 模型类 """ # 名称 title = models.CharField(max_length=30) # 日期 tdate = models.DateField() # 逻辑删除,数据库中不做真正删除,只做删除标记,也可称为软删除 isdelete = models.BooleanField(dtestefault=False) # 在模型类中创建一个模型管理器对象 # 自定义manager对象,管理器 类似 TestInfo.objects.xxx # 只是此时的objects 换成 了test # test = models.manager() # 用继承models.Manager的TestManager类创建管理器 test = TestManager()
然后我们就可以通过模型管理器给模型类对应的表中添加数据了
TestInfo.test.create_new_test('test','1980-8-9')
但是值得注意的是,我们通过模型类名创建对象,那么当模型类名发生变化后,我们就得去修改方法中创建对象的代码了。
那么在管理器中有一个 self.model 实例属性
这个实例属性会帮我们创建管理器(test = TestManager() )所在的模型类对象
代码
from django.db import models # Create your models here. class TsetManager(models.Manager): """ 模型管理器类 """ # 封装函数 通过 模型管理器实现对模型类对应表进行操作 def create_new_test(self, title, tdate): # 创建一个模型类对象 我们需要通过模型类对象对数据表进行操作 # 就像 TestInfo.title = xxxx # 通过self.model 创建模型类对象 # 替换了 test = TestInfo() test = self.model test.title = title test.tdate = tdate test.save() # 返回模型类对象 return test class TestInfo(models.Model): """ 模型类 """ # 名称 title = models.CharField(max_length=30) # 日期 tdate = models.DateField() # 逻辑删除,数据库中不做真正删除,只做删除标记,也可称为软删除 isdelete = models.BooleanField(dtestefault=False) # 在模型类中创建一个模型管理器对象 # 自定义manager对象,管理器 类似 TestInfo.objects.xxx # 只是此时的objects 换成 了test # test = models.manager() # 用继承models.Manager的TestManager类创建管理器 test = TestManager()
以上就是学习模型类和模型管理器之间关系做的一些记录,如果有错误的地方,麻烦大家指出。初学不易,还请多多包含
相关文章推荐
- django使用celery学习记录
- Django学习之路-3使用模型
- django form使用学习记录
- 自学记录--django模型使用记录
- django学习记录-django-1.5中简单地自定义自己的用户模型
- python学习笔记之Django入门三:定义模型、激活模型、使用django管理网站
- django 学习-6 定义模型--数据库的使用
- Django学习笔记2 模型的使用
- django models使用学习记录
- Pyhton_Django学习笔记(五) 模型与MYSQL数据库使用
- django view使用学习记录
- django模型manager学习记录
- django学习02-模型的使用
- django中日志使用学习记录
- MOSS Search学习记录(十):MOSS Visual How To使用SharePoint Server 2007搜索对象模型编程创建搜索查询
- django学习记录-模型继承
- Django学习计划--模型使用
- 【转】Android使用SQLiteOpenHelper对数据库进行版本管理【学习记录】
- VC6 下学习使用Teechart8记录 二 绘制实时曲线
- 关于asp.net中dataList控件的使用学习记录