跨表操作在数据库操作非常常用,虽然其会降低读取数据的性能,但是它能节约数据在硬盘中的占用,优化数据表的结构和各自之间的关系。
在sql中,一般跨表需要用到 join 关键字
select * from table1 left join table2 on table1.id = table2.id
那到了Django框架中,又是如何实现跨表的呢?
#创建一个类 class userinfo(Models): user_name = models.charField(max_length=32) m = models.manytomanyField('usertype') class usertype(Models): name = models.charField(max_length=32)
通过m,Django内部就会自动生成第三张关系表。
接下来,该如何对这第三张表进行操作呢?
#创建一个类 class userinfo(Models): user_name = models.charField(max_length=32) m = models.manytomanyField('usertype') class usertype(Models): name = models.charField(max_length=32) #通过创建一个userinfo的对象,通过对象的m属性进行增删改查 obj= userinfo() obj.m.add() 增加 obj.m.remove() 删除 obj.m.set() 更新 obj.m.clear() 清楚全部数据 obj.m.all() 查询
再说说通过外键进行正向查询和反向查询
#正向 objs = models.userinfo.objects.values('id','user_name','fk__name') for obj in objs: obj.fk.name #反向 小写的表格名__xxx objs=models.usertype.objects.values('id','name','userinfo__user_name') for obj in objs: obj.userinfo__set.all()
PS:values 可以替换成values_list 和filter,都一样的用法