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.....