美文网首页
django_多表查询

django_多表查询

作者: 两点半的杂货铺 | 来源:发表于2018-02-13 17:06 被阅读22次

一、一对多

  • 利用ForeignKey 创建表

注关联表中会自动添加字段后面加_id,相当于publish _id,其中单独的publish包含整个Publish对象

class Book(models.Model):
    name = models.CharField(max_length=20)
    price = models.IntegerField()
    pud_data = models.DateField()
    publish = models.ForeignKey('Publish')


class Publish(models.Model):
    name = models.CharField(max_length=32)
    city = models.CharField(max_length=32)
  • 第一种方法通过真实的字段,也就是在_id添加
def index(request):
    from cm import models
    obj = models.Book.objects.create(
        name = "c#",
        price = 200,
        pud_data = '2008-08-08',
        publish_id= 1
    )
    print(obj)
    return  HttpResponse('ok')
  • 第二种通过对象添加,具体的操作是先查找出关联对象,把关联对象直接赋值給属性
  • 正向查找通过对象包含查找
def index(request):
    from cm import models
    obj = models.Book.objects.filter(name="python")
    print(obj[0].publish.city)
    return  HttpResponse('ok')
  • 反向查找,通过关联对象查找
  • 第一种通过对象反差
def index(request):
    from cm import models
    obj = models.Publish.objects.filter(name="理工")[0]
    obj1 = models.Book.objects.filter(publish=obj).values("name")
    print(obj1)
    return  HttpResponse('ok')
  • 第二种通过set反查,通过关联的类后面加_set
def index(request):
    from cm import models
    obj = models.Publish.objects.filter(name="理工")[0]
    obj1 = obj.book_set.all()
    print(obj1)
    return  HttpResponse('ok')
  • 第三种直接属性双下滑下接字段,例如publish__name
def index(request):
    from cm import models
    obj = models.Book.objects.filter(publish__name="理工").values("name")
    print(obj)
    return  HttpResponse('ok')

二、多对多

  • 利用ManyToManyField创建表
class Book(models.Model):
    name = models.CharField(max_length=20)
    price = models.IntegerField()
    pud_data = models.DateField()
    authors = models.ManyToManyField('Author')

class Author(models.Model):
    name = models.CharField(max_length=32)

利用查询包含ManyToManyField对象,进行查找关联表

def index(request):
    from cm import models
    obj = models.Book.objects.filter(name="go")
    print(obj[0].authors.all().values('name'))
    return  HttpResponse('ok')
  • 增加add,先找到关联对象,在有add添加对象
def index(request):
    from cm import models
    obj = models.Author.objects.all()
    obj1 = models.Book.objects.filter(name="python")
    obj1[0].authors.add(*obj)
    return  HttpResponse('ok')
  • 或者直接添加主键
def index(request):
    from cm import models
    obj = [1,2]
    obj1 = models.Book.objects.filter(name="python")
    obj1[0].authors.add(*obj)
    return  HttpResponse('ok')
  • remove删除
def index(request):
    from cm import models
    obj = [1,]
    obj1 = models.Book.objects.filter(name="python")
    obj1[0].authors.remove(*obj)
    return  HttpResponse('ok')

相关文章

  • django_多表查询

    一、一对多 利用ForeignKey 创建表 注关联表中会自动添加字段后面加_id,相当于publish _id,...

  • SQLAlchemy(四)

    知识要点: 1.多表查询 2.原生SQL的查询 多表查询 在MySQL中我们讲了多表查询,在SQLAlchemy中...

  • python面试题01

    1、什么是多表关联查询,有几种多表关联的查询方式,分别是什么? 多表关联查询概念: 多表关联查询分类:1.1内连接...

  • 数据库基本操作3.0

    今日内容 多表查询 \\ 事务DCL 多表查询: 事务 DCL:

  • MySql : 三、 多表查询和事务

    前言 本篇主要介绍了数据库中多表查询以及事务相关的知识。 目录 一、多表查询二、子查询三、事务 一、多表查询 1....

  • Oracle详解(Ⅱ):世界上目前已知最好的关系型数据库

    多表查询 多表连接基本查询 使用一张以上的表做查询就是多表查询 这样会出现的结果就是:笛卡儿积连接查询的时候一般在...

  • spring-data-jpa 复杂查询:使用

    单表查询 多表查询

  • 4.MySQL多表&事务

    主要内容 1 . 多表查询2 . 事务3 . DCL 多表查询: 事务 DCL:

  • SQL语句常用命令整理---多表查询

    多表查詢之关连查询 多表数据连接查询,简称连接查询。本篇我们来一同学习多表连接查询的相关用法,主要內容有: 内连接...

  • sql多表查询

    普通多表查询 嵌套多表查询 链接多表查询 左链接(会将左表的内容全部输出,没有需要补NULL) 右链接(会将右表的...

网友评论

      本文标题:django_多表查询

      本文链接:https://www.haomeiwen.com/subject/bnrjtftx.html