model增删改查
2018-05-07 本文已影响0人
黑夜的眸
查model
最常使用all(), get(), filter()和exclude()
filter()返回一个Queryset集合,即使只有一个对象满足匹配条件,也返回一个包含该对象的集合
get()返回单个对象
exclude()返回满足条件对象以外的集合
order_by()排序
exact
Entry.objects.get(headline__exact="Cat bites dog") #显示表达
Entry.objects.get(headline="Cat bites dog") #隐式表达
iexact不区分大小写
Blog.objects.get(name__iexact="beatles blog")
匹配"Beatles Blog", "beatles blog", 或者"BeAtlES blOG".
contains包含即可
Entry.objects.get(headline__contains='Lennon')
可以匹配'Today Lennon honored',但不可匹配'today lennon honored'
icontains不区分大小写
具有标题为'Lennon'且发布时间为2008年条目的博客
Blog.objects.filter(entry__headline__contains='Lennon', entry__pub_date__year=2008)
具有标题为'Lennon'条目且具有发布时间为2008年条目的博客
Blog.objects.filter(entry__headline__contains='Lennon').filter(entry__pub_date__year=2008)
前者条件更为苛刻
n 数量
gt greater than 大于
lt less than小于
F() 允许同一model的两个不同域间进行比较,如下:
from django.db.models import F
Entry.objects.filter(n_comments__gt=F('n_pingbacks'))
in 在...之类
Blog.objects.filter(pk__in=[1,4,7])
Q
允许使用|(或运算符)和 &(与运算符)
from django.db.models import Q
Polls.objects.get(
Q(question__startswith='Who'),
Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6))
)
增model
model实例化
>>> from blog.models import Blog
>>> b = Blog(name='Beatles Blog', tagline='All the latest Beatles news.')
>>> b.save()
删model
delete()函数
Entry.objects.filter(pub_date__year=2005).delete()
改model
update()函数
# Update all the headlines with pub_date in 2007.
Entry.objects.filter(pub_date__year=2007).update(headline='Everything is the same')
其它函数:
add(obj1, obj2, ...)
#将特定的模型对象加入关联对象集合。
create(**kwargs)
#Creates a new object, saves it and puts it in the related object set.
#Returns the newly created object.
remove(obj1, obj2, ...)
#Removes the specified model objects from the related object set.
clear()
#Removes all objects from the related object set.
set(objs)
#Replace the set of related objects.