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