1. 程式人生 > >ORM之連表操作

ORM之連表操作

span 技術 數據 import alt AD apt 分享 增加

  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之連表操作