Django在OS X下的编程实战(二)操作博客数据模型

第一篇最后想略过的部分,被很多人追着问,我反复解释还不如写出来。


顺着上次的博客系统和数据模型继续写。这一篇的主题就是针对模型进行操作。


创建帖子对象

from django.contrib.auth.models import User
from blog.models import Post
user = User.objects.get(username='admin')
Post.objects.create(title='A post',slug='A slug',body='A post body',author=user)
Post.save()

更新对象

Post.title='New title'
Post.save()

访问数据对象

all_posts = Post.objects.all()

过滤对象

Post.objects.filter(publish_year=2016)
<pre name="code" class="python">Post.objects.filter(publish_year=2016).exclude(title_endwith='temp')

 

排序

Post.objects.order_by('title')

删除对象

Post.objects.get(id=1).delete()

这上面的操作都是在称之为QuerySet上的操作,因为很多时候都是在内存中处理数据,很快,出了以下情况:

1. 第一次遍历这个QuerySet对象

2. 取子集的时候,比如:Post.objects.all()[2:]

3. 缓存对象

4. 计算repr()或者len()

5. 显示的调用list()

6. 测试真伪bool()

定制数据模型管理器

除了objects这个缺省的数据模型管理器之外,还可以定制管理器。这里有两种办法,第一种是直接修改缺省管理器queryset,一种就是在objects下面创建新的管理器,然后用类似Post.my_manager.all()来引用它。还是用上一篇的例子,在models.py里面增加定制管理器:

class PublishedManager(models.Manager):
       def get_queryset(self):
            return super(PublishedManager,self).get_queryset().filter(status='published')


class Post(models.Model):
        # ...
        objects = models.Manager() # 缺省模型管理器
        published = PublishedManager() # 定制发布状态帖子数据模型管理器
所以使用定制管理器可以在更特定数据集做操作,比如Post.published.filter(title_startwith='FIVE')。对于数据模型操作的最后一步是数据可视化,接下来我们需要把各种数据和数据子集可视化为页面的表格和列表,这个动作在view.py里面完成。

def post_detail(request,year,month,day,post):
    post=get_object_or_404(Post,slug=post,status='published',publish_year=year,publish_month=month,publish_day=day)
    return render(request,'blog/post/detail.html',{'post':post})
在数据模型上面还可以增加很多,Django的在线文档零零碎碎都有提及,在具体项目中,慢慢体会吧。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值