model的增,删,改,查四个操作。
from django.db import models
class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField()
def __str__(self):
return self.name
class Author(models.Model):
name = models.CharField(max_length=200)
email = models.EmailField()
def __str__(self):
return self.name
class Entry(models.Model):
blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
headline = models.CharField(max_length=255)
body_text = models.TextField()
pub_date = models.DateField()
mod_date = models.DateField()
authors = models.ManyToManyField(Author)
number_of_comments = models.IntegerField()
number_of_pingbacks = models.IntegerField()
rating = models.IntegerField()
def __str__(self):
return self.headline
Creating objects(增加对象)
# 方法一: >>> b = Blog(name='Beatles Blog', tagline='All the latest Beatles news.') >>> b.save() # 方法二: >>> b = Blog.objects.create(name='Beatles Blog', tagline='All the latest Beatles news.')
注意:在方法一,如果没有显示调用.save()方法后,django并不会对数据库进行操作,所有此时数据并没有增加到数据库中。
方法二直接就在数据库中增加了。
Retrieving objects(查询获取对象)
Blog.objects.API
filter( )
返回一个新的符合匹配条件的对象的查询集。
get()
返回符合匹配条件的一个对象。
注意:当没有匹配到对象时,会报错;当匹配到的对象大于1个时,也会报错。
当匹配到一个结果时,get() 相当于 filter()[0]
exclude()
返回一个新的不符合匹配条件的对象的查询集。
order_by()
使用order_by 会覆盖model类Meta选项中的ordering。-表示降序,? 表示乱序,默认表示升序。
Entry.objects.filter(pub_date__year=2005).order_by('-pub_date', 'headline')
注意:如果想要根据model中一个外键返回指定排序后的查询集。
Entry.objects.order_by('blog') # 等同于 Entry.objects.order_by('blog__id')
reverse()
将查询结果集降序排列后返回。
distinct()
将查询集进行去重操作后返回。正常情况下使用all()方法后的查询集不会存在重复对象(因为主键是唯一的)。
但是当你跨表查询时会用到。
values()
将查询结果以字典列表的形式返回。
Blog.objects.filter(name__startswith='Beatles').values() <QuerySet [{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}]>
注意:values()方法中可以填入可选的位置参数。表示需要将哪些字段以字典列表的形式返回。
>>> Blog.objects.values('id', 'name') <QuerySet [{'id': 1, 'name': 'Beatles Blog'}]>
values_list()
和上面的values()方法很相像,不过values_list()返回的是元祖列表。
>>> Entry.objects.values_list('id', 'headline') <QuerySet [(1, 'First entry'), ...]>
all()
union()
将两个或者多个查询集合并返回。通常情况下,合并只会合并不重复的值。如果重复值也要何在一起,需要设置all=True。
>>> qs1 = Author.objects.values_list('name') >>> qs2 = Entry.objects.values_list('headline') >>> qs1.union(qs2).order_by('name')
count()
返回查询集中的对象个数。
first()
返回查询集中第一个对象,如果没有则返回None.如果查询集没有排序,那么使用first()方法会自动根据主键进行排序。
last()
exists()
查询操作返回结果集中是否存在对象。True或者False。
可以用于判断是否包含成员等等。
update()