• Django学习手册


    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,而不是外键对象
  • 相关阅读:
    软件实现的施密特触发器
    激励
    正式搬家,到博客园
    IAR编译器的常见问题
    记正式开始工作
    调度器的介绍
    atmega8 例程:AD中断方式采集
    【IAR警告】Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined
    AD转换器的参数介绍
    影响LIMIT子句使用的一个mysql配置项
  • 原文地址:https://www.cnblogs.com/Anec/p/9530194.html
Copyright © 2020-2023  润新知