简介
Django ORM用到三个类:Manager、QuerySet、Model。
Manager定义表级方法(表级方法就是影响一条或多条记录的方法),我们可以以models.Manager为父类,定义自己的manager,增加表级方法;QuerySet:Manager类的一些方法会返回QuerySet实例,QuerySet是一个可遍历结构,包含一个或多个元素,每个元素都是一个Model 实例,它里面的方法也是表级方法。
前面说了,Django给我们提供了增加表级方法的途径,那就是自定义manager类,而不是自定义QuerySet类,一般的我们没有自定义QuerySet类的必要;django.db.models模块中的Model类,我们定义表的model时,就是继承它,它的功能很强大,通过自定义model的instance可以获取外键实体等,它的方法都是记录级方法(都是实例方法,貌似无类方法),不要在里面定义类方法,比如计算记录的总数,查看所有记录,这些应该放在自定义的manager类中。
1. QuerySet
django QuerySet对象转换成字典对象
>>> from django.contrib.auth.models import User >>> from django.forms.models import model_to_dict >>> u = User.objects.get(id=1) >>> u_dict = model_to_dict(u) >>> type(u) <class 'django.contrib.auth.models.User'> >>> type(u_dict) <type 'dict'>
通过使用values方法
>>> from django.contrib.auth.models import User >>> result=User.objects.all().values() >>> list_result = [entry for entry in result] >>> print(list_result ) [{'id':1,'username':'陈新明','email':'aaaa@163.com'}] >>> result=User.objects.all().values('id','username') >>> list_result = [entry for entry in result] [{'id':1,'username':'陈新明'}]
aggregate
all 返回所有的QuerySet
annotate
as_manager
bulk_create
bulk_update
complex_filter
count 返回QuerySet的数量 返回整数
create
dates
datetimes
db
defer,
delete
difference 对QuerySet数据去重
distinct
earliest
exclude
exists 检查QuerySet是否有数据 返回True/False
explain
extra
filter 过滤
first 返回QuerySet中第一个
get
get_or_create
in_bulk
intersection
iterator
last 返回QuerySet中最后一个
latest
model QuerySet属于哪一个model
none
only
order_by QuerySet排序
ordered
prefetch_related
query
raw
resolve_expression
reverse QuerySet顺序颠倒
select_for_update
select_related
union
update,
update_or_create
using
values
values_list