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.....
浙公网安备 33010602011771号