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,而不是外鍵對象