学习 Django 如何连接到数据库,并将数据存储在里面。
Django shell
source myvenv/bin/activate
进入虚拟环境python manage.py shell
进入Django的交互控制台中。
注意 这个提示符也是 >>> 但是不是在python 中,而是带有Django特性的python环境中,在这里面可以执行 所有python命令。
所有对象
导入Post
从 blog.models
导入 Post
的模型。 注意: 这里的 Post
第一个字母是 大写from blog.models import Post
显示所有的帖子
注意: 这里的
Post
的P
也是大写
Post.objects.all()
这里的文章,都是我们之前在(4.Django admin 管理后台)这一节的时候创建的帖子。
之前是通过 Django admin创建的,现在我们要血蹄如何通过Python来创建新的文章。
创建对象
导入用户模型
from django.contrib.auth.models import User
查看数据库中有哪些用户
User.objects.all()
获取用户实例
me = User.objects.get(username='zfl420')
赋值给me 现在 一个
username
等于zfl420
的User
创建文章
这个时候,这里的author 会用到
me
Post.objects.create(author=me, title='Sample title', text='Test')
检查是否有效
Post.objects.all()
这是显示所有文章的语句,上面学的。我们会发现,这个时候多了一篇文章,就是通过刚刚的语句创建的。
添加更多文章
再练习一下,通过
Post.objects.create(author=me, title='标题名称', text='帖子内容')
创建文章。通过
Post.objects.all()
显示所有文章。
筛选对象
通过filter
来筛选,在括号中填入条件。
筛选author = me 的文章
Post.objects.filter(author=me)
筛选 文章标题是 wenzhang1的文章
Post.objects.filter(title='wenzhang1')
筛选文章标题包括 wen 的所有文章,这个时候我们需要用到
title__contains
注意:中间是两个_
Post.objects.filter(title__contains='wen')
获取已发布文章列表
我们通过筛选所有含published_date
为过去时间的文章来实现这个目的:
from django.utils import timezone Post.objects.filter(published_date__lte=timezone.now())[]
不幸的是,通过Python终端添加的文章还没发布。我们可以改变它!首先获取一个我们想要发布的文章实例:
>>> post = Post.objects.get(title="Sample title")
然后将它与我们 publish
的方法一起发布 !
>>> post.publish()
现在再一次尝试获取已发布的文章(按向上箭头按钮三次,然后按回车):
>>> Post.objects.filter(published_date__lte=timezone.now())
<QuerySet [<Post: Sample title>]>
对象排序
Post.objects.order_by('created_date')
也可以在created_date前面加一个 -
来 查询倒序
Post.objects.order_by('-created_date')
链式 QuerySets
也就是两个语句链接在一起查询,先查询出前面的结果再排序。
Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
关闭 shell程序
exit()