ORM之连表操作

Posted 王先生是胖子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORM之连表操作相关的知识,希望对你有一定的参考价值。

  ORM之连表操作

  UserInfo和UserType两个表关联,UserInfo的外键连UserType的主键。拿到UserInfo的所有信息,就可以拿与UserInfo相关联的UserType的数据。

   result = model.UserInfo.object.all()

  与UserInfo有关联的UserType表:

    for obj in result:

      print(obj.name,obj,age,obj.ut_id,obj.ut_title)

      #ut_id是UserType表的id,ut_title是UserType中的title

      #如果UserType表中,也有Foreigkey字段,也可以继续跨表,接着点就行。

 

eg:

  在model中:

技术分享图片
from django.db import models

class Foo(models.Model):
    caption = models.CharField(max_length=32)
    
class UserInfo(models.Model):
    #主键会自行创建,也可自己创建,nid为字段
    nid = models.BigAutoField(primary_key=True)
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    #增加列,在增加是,可以定义为空,也可定义为默认值
    age = models.IntegerField(null=True)
    # age = models.IntegerField(default=1)

    #外键关联UserGroup表,代表UserGroup的一行数据
    usergroup = models.ForeignKey("UserGroup",null=True)

class UserGroup(models.Model):
    #隐藏id,Django的ORM会加的
    title = models.CharField(max_length=32)
    fo = models.ForeignKey(Foo,null=True)
model

  在views中:  

技术分享图片
from models同级目录文件 import models

def test(request):
    result = models.UserInfo.objects.all()
    print(result)
    for i in result:
        print(i.username,i.usergroup.title,i.usergroup.fo.caption)
views

 在print(i.username,i.usergroup.title,i.usergroup.fo.caption)中,有跨一张表的,和两张表的。

  i.username:拿的本表的

  i.usergroup.title 跨一张表的

  i.usergroup.fo.caption 跨两张表的



以上是关于ORM之连表操作的主要内容,如果未能解决你的问题,请参考以下文章

Django视图之ORM连表操作一

Django - ORM操作

13.Django之数据库models&orm连表操作补充以及其他知识点补充

Django进阶-ORM框架的一般操作

Python 什么是ORM?

python—day60 Object Relational Mapping(ORM) ORM连表查询 ORM进阶