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,而不是外键对象