Django学习之----model(2)
来源:互联网 发布:时时彩源码搭建教程 编辑:程序博客网 时间:2024/06/06 06:43
model第二章主要介绍models中attributes(属性)、methods(方法)和重写model方法。
一、自定义Managers
在第一章介绍了查询数据库
person = Person.objects.all()
细心的同学会注意,我们的Person类中并没有定义objects的方法啊,为什么可以这么用呢?其实这是默认的Managers。今天我们来看看如何自定义Managers
class BookManager(models.Manager): def all(self, *args, **kwargs): return self.get_query_set().exclude(status=0).filter(*args, **kwargs) def filter(self, *args, **kwargs): return self.get_query_set().exclude(status=0).filter(*args, **kwargs)class Book(TimeStampedModel): DELETED = 0 PUBLISHED = 1 STATUS_CHOICES = ( (DELETED, u'已删除'), (PUBLISHED, u'发布'), ) title = models.CharField(max_length=255) status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, default=PUBLISHED) objects = models.Manager() active_objects = BookManager()
会我们可以这么调用Book
book = Book.objects.all() #显示数据所有数据
book = Book.active_objects.all() #只显示状态不为0的书籍,就是未删除书籍
是不是很方便呢?
二、models添加方法
对于models一些常用的操作,比如将数据库中某一个或者多个字段拼接成一个uri。
class BookPosition(models.Model): title = models.CharField(max_length=100) channel = models.CharField() position = models.PositiveIntegerField(default=0) description = models.TextField(null=True) def get_uri(self): return "/%s/%s/" % (self.channel, self.position)你就可以这么用:
position = BookPosition.objects.get(title='test')
uri = position.get_uri()
三、重写models的方法
class BookShareData(TimeStampedModel): book = models.ForeignKey(LayoutBook, related_name='booksharedata') def save(self, *args, **kwargs): #do_something() 保存前做一些操作 if user.type == 'VIP': super(BookShareData, self).save(*args, **kwargs) # Call the "real" save() method. else: return #do_something_else() 保存后做一些操作 user.num += 1
上面我们重写了models的save()方法,再保存前我添加了判断,只有为VIP的用户才有保存的权限。保存后该用户的次数加上1。
第二章就这些内容了,举的例子比较简单,用好以上3种方法,对models的理解绝对上了一个层次。
1 0
- Django学习之----model(2)
- Django学习之----model(1)
- django学习笔记之(model设计与实现)
- django学习之三:model模型创建
- Django学习小记[2] —— Model
- Django 学习 2 MODEL数据建模
- Django学习小记[2] —— Model
- Django学习06---Model模型(数据库)
- Django之Model操作
- Django-rest-framework学习(-)Serialization
- python学习之--Django--连接数据库mysql创建model
- angualr学习笔记3-angular模型(model)
- Django框架学习-Model篇
- django学习8 model类
- Django学习指南之Model层
- Python Django model之字段
- CodeIgniter框架源码学习之模型类--Model.php
- Django学习笔记(三)—— 模型 model
- rmi的代码学习
- routes.js剖析
- Android手势使用之 GestureDetector
- firefox中使用ocx的方法
- 业余09—中科院博士教你如何查找外文文献
- Django学习之----model(2)
- (四十三)作业题
- 从STORE 然后从客户销售视图中取值
- android select采用代码实现按钮背景
- beyond compare
- OpenStack, OpenDaylight, OpenFlow and Open vSwitch
- 如何开发线程安全的Servlet?
- 剑指offer7 斐波那契数列
- Just Say It!——DNN在语音识别系统中的应用