Django中怎么操作ORM连表

  

这篇文章运用简单易懂的例子给大家介绍Django中怎么操作ORM连表,代码非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

ORM连表操作

我们在学习django中的orm的时候,我们可以把一对多,多对多,分为正向和反向查找两种方式。

正向查找:ForeignKey在 UserInfo表中,如果从UserInfo表开始向其他的表进行查询,这个就是正向操作,反之如果从UserType表去查询其他的表这个就是反向操作。

(1)一对多:models.ForeignKey(其他表)

(2)多对多:models.ManyToManyField(其他表)

(3)一对一:models.OneToOneField(其他表)

正向连表操作总结:

所谓正、反向连表操作的认定无非是Foreign_Key字段在哪张表决定的,

Foreign_Key字段在哪张表就可以哪张表使用Foreign_Key字段连表,反之没有Foreign_Key字段就使用与其关联的小写表名;

1对多:对象.外键.关联表字段,values(外键字段__关联表字段)

多对多:外键字段.all()

反向连表操作总结:

通过value、value_list、fifter 方式反向跨表:小写表名__关联表字段

通过对象的形式反向跨表:小写表面_set().all()

前端ajax需要携带的参数 

根据前端参数,返回不同数据库结果

应用场景:

(1)一对多:当一张表中创建一行数据时,有一个单选的下拉框(可以被重复选择)

例如:创建用户信息时候,需要选择一个用户类型【普通用户】【金牌用户】【铂金用户】等。

(2)多对多:在某表中创建一行数据是,有一个可以多选的下拉框。

例如:创建用户信息,需要为用户指定多个爱好。

Django中怎么操作ORM连表

(3)一对一:在某表中创建一行数据时,有一个单选的下拉框(下拉框中的内容被用过一次就消失了。

例如:原有含10列数据的一张表保存相关信息,经过一段时间之后,10列无法满足需求,需要为原来的表再添加5列数据。

1对多

如果A表的1条记录对应B表中N条记录成立,两表之间就是1对多关系;在1对多关系中 A表就是主表,B表为子表,ForeignKey字段就建在子表;

如果B表的1条记录也对应A表中N条记录,两表之间就是双向1对多关系,也称为多对多关系;

在orm中设置如果 A表设置了外键字段user=models.ForeignKey('UserType')到B表(注意外键表名加引号)

就意味着 写在写A表的B表主键, (一列),代表B表的多个(一行)称为1对多,

查询

总结:利用orm获取 数据库表中多个数据

获取到的数据类型本质上都是 queryset类型,

类似于列表,

内部有3种表现形式(对象,字典,列表)

modle.表名.objects.all()

modle.表名.objects.values()

modle.表名.objects.values()

跨表

正操作

所以表间只要有外键关系就可以一直点下去。

所以可以通过obj.外键.B表的列表跨表操作(注意!!orm连表操作必须选拿单个对象,不像SQL中直接表和表join就可以了)

print(obj.cls.title)

foreignkey字段在那个表里,那个表里一个"空格"代表那个表的多个(一行)

class UserGroup(models.Model):
  ,,,,,,,,,,,,,,
  ,,,,,,,,,,,部门,3
  ,,,,,,,,,,,,,,
  ,,,,,,,,,,,title =, models.CharField (max_length=32)
  ,,,,,,,class 用户信息(models.Model):
  ,,,,,,,,,,,,,,
  ,,,,,,,,,,,员工4
  ,,,,,,,,,,,,,,
  ,,,,,,,,,,,nid =, models.BigAutoField (primary_key=True)
  ,,,,,,,,,,,user =, models.CharField (max_length=32)
  ,,,,,,,,,,,password =, models.CharField (max_length=64)
  ,,,,,,,,,,,age =, models.IntegerField(默认=1)
  ,,,,,,,,,,,#,ug_id  1
  ,,,,,,,,,,,ug =, models.ForeignKey (“UserGroup", null=True) 

1。在取得时候跨表

=UserInfo.objects.all()中国当代()

q.ug.title

2。在查的时候就跨表了,

UserInfo.objects.values (& # 39; nid& # 39; & # 39; ug_id& # 39;),

UserInfo.objects.values (& # 39; nid& # 39; & # 39; ug_id& # 39;, & # 39; ug__title& # 39;),,#注意正向连表是,外键__外键列反向是小写的表名

3。UserInfo.objects.values_list (& # 39; nid& # 39;, & # 39; ug_id& # 39;, & # 39; ug__title& # 39;)

<强>反向连表:

<强>反向操作无非2种方式:

Django中怎么操作ORM连表