Django學習手冊 - ORM 外鍵


Django 外鍵創建

關鍵語法: 

  models.ForeignKey("UserGroup",to_field="gid",default=1,on_delete=models.CASCADE)

參數:

  "UserGroup"            #外鍵另外一張表

  to_field="gid"           #另外一張表的字段

  on_delete=models.CASCADE    #因為不加這個會報錯相關(https://www.cnblogs.com/phyger/p/8035253.html)

 

創建數據表格:

from django.db import models

# Create your models here.

class userinfo(models.Model):
    uname = models.CharField(max_length=32,db_column="用戶名")
    pwd = models.CharField(max_length=32,db_column="密碼")
    email = models.EmailField(null=True,db_column="郵箱")
    usergroup = models.ForeignKey("UserGroup",to_field="gid",default=1,on_delete=models.CASCADE) class UserGroup(models.Model):
    gid = models.AutoField(primary_key=True)
    gname = models.CharField(max_length=32)
    test = models.CharField(max_length=32,null=True)
    g = models.ForeignKey("Group", to_field="id",null=True,on_delete=models.CASCADE) class Group(models.Model):
    grouplist = models.CharField(max_length=255)

 

在每個字段中都錄入數據:

usergroup表 外鍵 g_id

userinfo表 外鍵 usergroup_id

 

跨表查詢:原理--(對象(對象(對象)))

obj2 = models.userinfo.objects.filter(uname="root").first()
print(obj2.usergroup.g.grouplist)

 

Django 外鍵 數據獲取

定義表結構:

from django.db import models

# Create your models here.
class userinfo(models.Model):
    uname = models.CharField(max_length=255)
    sex = models.CharField(max_length=12)
    g = models.ForeignKey("usergroup",to_field="id",on_delete=models.CASCADE,default='1')

class usergroup(models.Model):
    groupname = models.CharField(max_length=255)

外鍵 數據獲取:

def index(request):
    # #方式一,obj對象方式
    # ss = models.userinfo.objects.filter(id=1)
    #
    # for i in ss :
    #     # print(i) 為一個OBJ 對象
    #     print(i.uname,i.sex,i.g_id,i.g.id,i.g.groupname)

    #方式二,字典方式
    # ss2 = models.userinfo.objects.filter(id=1).values("id","uname","g__groupname")
    # for i2 in ss2 :
    #     # print(i2) 為一個字典對象,根據key取值
    #     print(i2['id'],i2['uname'],i2['g__groupname'])

    # 方式三,元組方式
    # ss2 = models.userinfo.objects.filter(id=1).values_list("id","uname","g__groupname")
    # for i2 in ss2 :
    #     # print(i2) 為一個元組對象,根據索引取值
    #     print(i2[0],i2[1],i2[2])

    #總結,在利用一對多的表查詢時,字典和元組 方式不能直接用 “ . ”(點) 的方式直接取值,否則會直接報錯。
    #取值通過 雙下划 線的方式取值。

    return HttpResponse("OK")

外鍵創建新數據:

    #外鍵 創建新數據條目:
    models.userinfo.objects.create(
        uname="小花",
        sex="",
        g_id="3"
    )
    #添加一條數據,跨表添加時需引用外鍵的id,而不是外鍵對象

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM