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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM