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

目录

一对一

创建实例


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类型,如何获取到的是对应的值,而不是键

Django笔记(十三)一对一,一对多,多对多之间的查询
这个表里面的这个字段,数据库保存的是键1或者2
Django笔记(十三)一对一,一对多,多对多之间的查询
我想查询出来的这个字段是具体的值,如何写

Django笔记(十三)一对一,一对多,多对多之间的查询
 get_字段名_display()

这样就可以获取具体的值

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

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

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

; 一对多

实体类

男孩表
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)

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

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

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

    obj = Boy.objects.filter(name="小明").first()

    获取到相亲表对象

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

    object (1)>, <xaingqing: xaingqing object (2)>]>

    print(relist.query)

    for item in relist:

        print(item.nv.name)

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

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

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

实体类

Django笔记(十三)一对一,一对多,多对多之间的查询
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笔记(十三)一对一,一对多,多对多之间的查询
Django笔记(十三)一对一,一对多,多对多之间的查询

如何操作第三个表

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

增加

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

; 移除

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

编辑(覆盖)

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

; 查询

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

清空

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

Original: https://blog.csdn.net/python113/article/details/121319001
Author: 一天不写代码难受
Title: Django笔记(十三)一对一,一对多,多对多之间的查询

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/736344/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球