Django学习路19_is_delete属性,重写类方法,显性隐性属性
Posted hany-postq473111315
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django学习路19_is_delete属性,重写类方法,显性隐性属性相关的知识,希望对你有一定的参考价值。
如果在 创建数据表时,使用了
objects = models.Model()
使隐形属性变为了 显性属性
则 必须要自己定义一个
继承了 models.Model 类的类,实现 管理功能
如果一个属性一直都需要使用
比如 is_delete 属性,判断 这条数据是否删除
is_delete 为 True 也就是 1 时,则表示删除了
删除了就不应该在数据库表中再次使用了
models.py 中新添加的数据表,及其继承类
class AnimalManage(models.Manager):
# 父类先声明,继承的是 models.Manager 类,需要重写 filter 方法
‘‘‘使用继承,重写原来类的方法,进行改进函数时,考虑类的继承‘‘‘
def get_queryset(self):
‘‘‘使 filter 自动具有保留 is_delete 为 0 的功能,is_delete 为 1 的自动过滤掉‘‘‘
# return super(AnimalManage,self).get_queryset()
# 对父类的方法进行修改,将 is_delete 为 0 的留下
return super(AnimalManage,self).get_queryset().filter(is_delete = False)
def create(self,a_name = "Pandas"):
# 默认创建一个熊猫
‘‘‘改写创建对象语句,使用子类完成操作‘‘‘
animal = self.model()
# 创建一个模型
animal.a_name = a_name
return animal
class Animal(models.Model):
# 创建一个数据表为 Animal
a_name = models.CharField(max_length=16)
# 动物名字
is_delete = models.BooleanField(default=False)
# 设置是否删除数据,默认不删除,数据库中表示为 0
objects = AnimalManage()
# 设置管理者,objects 是什么名字
# 类名.定义的名字.all()
添加到数据库表中的数据
其中 is_delete 为 1 的表示已经删除的数据
is_delete 是需要的数据
在 urls.py 中添加参数
url(r‘getanimals‘,views.getanimals)
在 views.py 中添加 views. 后面的函数名
def getanimals(request):
animals = Animal.objects.all()
# 这里使用的是子类的实例化对象 objects
context = {
‘animals‘:animals
}
‘‘‘
animal = Animal.objects.create(‘动物名称‘)
使用 子类中定义的方法进行创建
‘‘‘
return render(request,‘Animals.html‘,context=context)
在 templates 中创建 render 函数中的 ‘xxx.html‘ 文件
此处 我的是 Animals.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>动物</title>
</head>
<body>
<h2>动物列表</h2>
<ul>
{% for animal in animals %}
<li>{{ animal.a_name }}</li>
{% endfor %}
</ul>
</body>
</html>
is_delete 为 1 的过滤掉了, 为 0 的保存了下来
2020-05-13
以上是关于Django学习路19_is_delete属性,重写类方法,显性隐性属性的主要内容,如果未能解决你的问题,请参考以下文章
Django学习路30_view中存在重复名时,取第一个满足条件的
Django学习路30_view中存在重复名时,取第一个满足条件的