ORM数据库操作补充:models中的一对一操作、过滤、事务

.all()获取的是多个对象,若是一个的话用all会报错。

获取单个的话,直接利用表内的字段名。	

一对一操作  OneToOneField
    一对一字段的关联,正好和多对多相反,只能关联表里的一条数据且唯一!
    关于操作:
        正向操作不变,获取当前对象 对象.自定义名.关联表字段
	反向操作:通过用户名->获取后缀
		获取用户表对象
		obj.小写表名.字段名	
	
过滤的话,我们知道可以通过某个字段的值进行过滤操作,其实我们也可以通过拿到的某个对象进行过滤。
    # 通过博客,获取用户信息:blog.user.nickname
    #
    # 获取当前博客所有文章
    # models.Article.objects.filter(blog=blog)--->blog代表一个对象
    # models.Article.objects.filter(blog_id=blog.nid) ----->字段方式过滤
    # blog.article_set.all()	

imagesFiled 中 有一个参数 upload_to= 指定上传地址,不写默认是在根目录下。

 事务:

  我们都在知道,在数据库操作中有事务操作,操作错误可以回滚!当然,Django怎么会想不到这个呢?内部已经封装了相关的函数,支持我们进行事务操作!!!

a. 事例一: with调用
try:
    from django.db import transaction
    with transaction.atomic():
        models.UpDown.objects.create(user_id=user_id,article_id=article_id,up=False)
        models.Article.objects.filter(nid=article_id).update(down_count=F('down_count')+1)
except Exception as e:
    response['status'] = False
    response['msg'] = str(e)

b. 事例二:装饰器添加
#函数里面有数据库操作,加在函数上
from django.db.transaction import atomic
 
@atomic
def cmd(self):
    model.....
    model.....

 

posted @ 2017-08-13 22:48  细雨蓝枫  阅读(118)  评论(0编辑  收藏  举报