前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django笔记(十三)一对一,一对多,多对多之间的查询

Django笔记(十三)一对一,一对多,多对多之间的查询

作者头像
一写代码就开心
发布2021-12-20 12:36:17
2.9K0
发布2021-12-20 12:36:17
举报
文章被收录于专栏:java和pythonjava和python

目录

一对一

创建实例

代码语言:javascript
复制
class UserProfile(models.Model):
    user_info = models.OneToOneField('UserInfo',on_delete=models.CASCADE)
    username = models.CharField(max_length=64)
    password = models.CharField(max_length=64)




class UserInfo(models.Model):
    user_type_choice = (
        (0, u'普通用户'),
        (1, u'高级用户'),
    )
    user_type = models.IntegerField(choices=user_type_choice)
    name = models.CharField(max_length=32)
    email = models.CharField(max_length=32)
    address = models.CharField(max_length=128)

先创建UserInfo表,再创建UserProfile表,这个UserProfile表里面有一个字段user_info ,是一对一的字段,也就是这个UserProfile表里面的user_info的字段,所有数据的都不一样,不可能一样,因为是OneToOneField,一对一

choice类型如何获取具体值

字段是choice类型,如何获取到的是对应的值,而不是键

在这里插入图片描述
在这里插入图片描述

这个表里面的这个字段,数据库保存的是键1或者2

在这里插入图片描述
在这里插入图片描述

我想查询出来的这个字段是具体的值,如何写

在这里插入图片描述
在这里插入图片描述

也就是使用下划线,

代码语言:javascript
复制
 get_字段名_display()

这样就可以获取具体的值

如何获取一对一另一个表里面的数据

UserInfo是一个表,UserProfile是一个表,并且UserProfile表里面有一个字段是一对一的外键,关联是UserInfo表,那么现在想要使用UserInfo表里面的数据的对象,获取到UserProfile表里面的数据,如何获取

在这里插入图片描述
在这里插入图片描述

一对多

实体类

代码语言:javascript
复制
男孩表
class Boy(models.Model):
    name = models.CharField(max_length=100)


女孩表
class Girl(models.Model):
    name = models.CharField(max_length=100)


相亲表
class xaingqing(models.Model):
    nan = models.ForeignKey('Boy',on_delete=models.CASCADE)
    nv = models.ForeignKey('Girl',on_delete=models.CASCADE)

一对多代码(自己创建第三个表)

有个相亲表都是外键,现在想要获取到和一个男孩相亲的女生有多少个,也就是男生是一个,女生是多个,典型的一对多的关系

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
    # 查询到某一个男生
    obj = Boy.objects.filter(name="小明").first()

    # 因为相亲表里面有个 字段关联的男生表,所以可以根据男生对象_set,
    获取到相亲表对象

    relist = obj.xaingqing_set.all()
    print(relist) 

 #   <QuerySet [<xaingqing: xaingqing 
    object (1)>, <xaingqing: xaingqing object (2)>]>
    
    # SELECT 
    # `myfirst_xaingqing`.`id`, 
    # `myfirst_xaingqing`.`nan_id`, 
    # `myfirst_xaingqing`.`nv_id` 
    # FROM `myfirst_xaingqing` 
    # WHERE `myfirst_xaingqing`.`nan_id` = 1
    print(relist.query)
    
    
    for item in relist:
        # item 代表相亲表里面的每一行数据对象
        print(item.nv.name)

1、搜索条件使用 __ 连接 2、获取值时使用 . 连接

一对多代码(Django给你生成第三个表)

我们有了男孩表,女孩表,之前我们写一个相亲表,让男孩表和女孩表进行关联。现在我们不写第三个表了,但是还想让两个表进行关联,我们可以这样写。(Django给你生成的只有3列

实体类

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
class Boy(models.Model):
    name = models.CharField(max_length=100)
    nvxx = models.ManyToManyField('Girl')
    
    
class Girl(models.Model):
    name = models.CharField(max_length=100)

现在model里面只有两个类,但是在数据库里面却有3个表,另一个关联表是Django给你生成的,就是通过ManyToManyField() 这个

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如何操作第三个表

这个Django给生成的第三个表,在model文件里面是没有的,那么我们要如何操作这个表,也就是实现对这个表的增删改查

增加
在这里插入图片描述
在这里插入图片描述
移除
在这里插入图片描述
在这里插入图片描述
编辑(覆盖)
在这里插入图片描述
在这里插入图片描述
查询
在这里插入图片描述
在这里插入图片描述
清空
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-12-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 一对一
    • 创建实例
      • choice类型如何获取具体值
        • 如何获取一对一另一个表里面的数据
        • 一对多
          • 实体类
            • 一对多代码(自己创建第三个表)
              • 一对多代码(Django给你生成第三个表)
                • 如何操作第三个表
            相关产品与服务
            数据库
            云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档