django事务、查询优化、MTV与MVC、多对多关系表新建字段方式
事务的开启
from django.db import transaction
with transaction:
#在改代码块执行的orm操作必须符合事务特性
………………
数据查询的优化
values(‘name’) 获得字典
only(‘name’) 只查询‘name’字段
defer(‘name’) 除了’name’字段都查询
查询出来的数据是一个个的对象。only查询出来后,再点这个对象不会再查询数据库了,如果点其他的属性的话会再次查询数据库。
res = models.Book.objects.only('name','price')
choice字段优化查询
在models.py中
class User(models.Model):
name = models.Charfield(max_length=32)
choice = ((1,'男'),(1,'女'),(1,'其他'))
gender = models.IntegerField(choice=choices)
在views.py视图函数中
user_obj = models.User.objects.get('name = 'xxx'')
print( user_obj.get_gender_display())
用get_gender_display()
方法可以获得用choice方法设置的字段属性 男 女 其他
MTV与MVC
MTV(django):
M:models
T;templates
V:views
MVC:
M:models
V:views
C:controller(url+views)
区别:两个框架的本质是一样的,django非得这么称呼MVC和MTV
多对多建立关系的两种方式
class Book(models.Model):
name = CharField(max_length=32)
author = models.ManyToManyField(to='Author',through='Book2Author,'through_fields= ('book','author'))
class Author(models.Model);
name = models.CharField(max_length=32)
class Book2Author(models.Model):
book = models.ForeignKey(to='book')
author = models.ForeignKey(to='Author')
对比用ManyToMany自动创建关系表,这种方式可以在新建的中间表中建立新的字段。