### 类的属性
* objects:是Manager类型的对象,用于与数据库进行交互
* 当定义模型类时没有指定管理器,则Django会为模型类提供一个名为objects的管理器
* 支持明确指定模型类的管理器
~~~
class BookInfo(models.Model):
...
books = models.Manager()
~~~
* 当为模型类指定管理器后,django不再为模型类生成名为objects的默认管理器
> 管理器Manager
>
* 管理器是Django的模型进行数据库的查询操作的接口,Django应用的每个模型都拥有至少一个管理器
* 自定义管理器类主要用于两种情况
* 情况一:向管理器类中添加额外的方法:见下面“创建对象”中的方式二
* 情况二:修改管理器返回的原始查询集:重写get_queryset()方法
~~~
class BookInfoManager(models.Manager):
def get_queryset(self):
return super(BookInfoManager, self).get_queryset().filter(isDelete=False)
class BookInfo(models.Model):
...
books = BookInfoManager()
~~~
* * * * *
### 创建对象
* 当创建对象时,django不会对数据库进行读写操作
* 调用save()方法才与数据库交互,将对象保存到数据库中
* 使用关键字参数构造模型对象很麻烦,推荐使用下面的两种之式
* 说明: _init _方法已经在基类models.Model中使用,在自定义模型中无法使用,
* 方式一:在模型类中增加一个类方法
~~~
class BookInfo(models.Model):
...
@classmethod
def create(cls, title, pub_date):
book = cls(btitle=title, bpub_date=pub_date)
book.bread=0
book.bcommet=0
book.isDelete = False
return book
# 引入时间包:
from datetime import *
# 调用:
book=BookInfo.create("hello",datetime(1980,10,11));
# 保存:
book.save()
~~~
* 方式二:在自定义管理器中添加一个方法
* 在管理器的方法中,可以通过self.model来得到它所属的模型类
~~~
class BookInfoManager(models.Manager):
def create_book(self, title, pub_date):
book = self.model()
book.btitle = title
book.bpub_date = pub_date
book.bread=0
book.bcommet=0
book.isDelete = False
return book
class BookInfo(models.Model):
...
books = BookInfoManager()
# 调用:
book=BookInfo.books.create_book("abc",datetime(1980,1,1))
# 保存:
book.save()
~~~
在方式二中,可以调用self.create()创建并保存对象,不需要再手动save()
~~~
class BookInfoManager(models.Manager):
def create_book(self, title, pub_date):
book = self.create(btitle = title,bpub_date = pub_date,bread=0,bcommet=0,isDelete = False)
return book
class BookInfo(models.Model):
...
books = BookInfoManager()
# 调用:
book=Book.books.create_book("abc",datetime(1980,1,1))
# 查看:
book.pk
~~~
* * * * *
### 实例的属性
* DoesNotExist:在进行单个查询时,模型的对象不存在时会引发此异常,结合try/except使用
### 实例的方法
* str (self):重写object方法,此方法在将对象转换成字符串时会被调用
* save():将模型对象保存到数据表中
* delete():将模型对象从数据表中删除
- 系统编程
- 1.进程
- 1.1.fork
- 1.2.多个进程能否修改全局变量
- 1.3多次fork的问题
- 1.4.进程的创建-multiprocessing
- 1.5.进程的创建-Process子类
- 1.6.进程池Pool
- 1.7.进程间通信--Queue
- 2.线程
- 2.1.多线程-Threading
- 2.2.threading注意点
- 2.3.多线程-共享全局变量
- 2.4.线程和进程的对比
- 2.5.同步
- 2.6.互斥锁
- 2.7.多线程-非共享数据
- 2.8.死锁
- 2.9.同步应用
- 2.10.生产者与消费者模式
- 2.11.ThreadLocal
- 2.12.异步
- 2.13.GIL的问题
- 网络编程
- 1.网络概述-udp
- 1.1.TCP/IP
- 1.2.端口
- 1.3.ip地址
- 1.4.socket简介
- 1.5.UDP介绍
- 1.6.udp网络程序-发送数据
- 1.7.udp网络程序-发送、接收数据
- 1.8.udp网络程序-端口问题
- 1.9.udp绑定信息
- 2.0.udp网络通信过程
- 2.1.udp应用:echo服务器
- 2.2.udp应用:聊天室
- 2.3.udp总结
- 2.4.udp综合-模拟QQ
- 2.TFTP下载和上传
- 3.TCP/IP
- 3.1.打开浏览器访问百度的过程
- web服务器
- 1.1.MyWebServer.py
- 1.2.MyWebFramework.py
- 正则
- 1.1.re模块
- 1.2.字符
- 1.3.原始字符串
- 1.4.表示数量
- 1.5.表示边界
- 1.6.匹配分组
- 1.7.贪婪和非贪婪
- 数据结构和算法
- 1.引入概念
- 1.1.第一次尝试
- 1.2.算法的提出
- 1.3.第二次尝试
- 1.4.算法效率衡量
- 1.5.算法分析
- 1.6.常见时间复杂度
- 1.7.python内置类型性能分析
- 1.8.数据结构
- 2.顺序表
- 2.1.顺序表的形式
- 2.2.顺序表的结构和实现
- 2.3.顺序表的操作
- 2.4.python中的顺序表
- 3.链表
- 3.1.单向链表
- 3.2.单向循环链表
- 3.3.双向链表
- 4.栈
- 4.1.栈的结构实现
- 5.队列
- 5.1.队列的实现
- 5.2.双端队列
- 6.排序和搜索
- 6.1.冒泡排序
- 6.2.选择排序
- 6.3.插入排序
- 6.4.快速排序
- 6.5.哈希排序
- 6.6.归并排序
- 6.7.常见排序算法效率比较
- 6.8.搜索
- 7.树与树算法
- 7.1.二叉树
- 7.2.二叉树的遍历
- 初识Django
- 1.小白
- 2.初次尝试
- 3.管理站点
- 4.视图
- 5.模板
- django模型
- 1.定义模型
- 2.模型成员
- 3.模型查询
- 4.自连接
- django视图
- django模板
- django高级
- django第三方
- django-git