您的位置:首页 > 编程语言 > Go语言

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()

以上就是学习模型类和模型管理器之间关系做的一些记录,如果有错误的地方,麻烦大家指出。初学不易,还请多多包含

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: