Django框架(十二):Models之ORM对多表【一对多】的操作(增、删、改、查)

目录

一、ORM多表操作之【一对多】增加记录(有道云笔记较详细)

如何针对表与表关系是一对多的情况,添加数据记录呢?(这里只说明操作)

解:有三种方式:

第一种方式:对数据库存储的外键赋值;即:publish_id

第二种方式:对自定义的外键赋值所关联表的一个关联值对象

二、ORM多表操作之【一对多】查询记录


一、ORM多表操作之【一对多】增加记录(有道云笔记较详细

models中,创建三个表,说明一下:外键如何创建?

#外键创建格式:外键名=models.ForeignKey("关联的表名"),默认关联表的主键,且这了的外键名并不是数据库中的外键名,数据库中记录的外键会根据这里的外键名加id:即:外键名_id

#外键:一定是创建在数据表关系【一对多】中【多】的那个表中;

from django.db import models

# Create your models here.
class Book(models.Model):

    name=models.CharField(max_length=20)
    price=models.ImageField()
    pub_date=models.DateField()
    publish=models.ForeignKey("Publish")
    #外键创建格式:外键名=models.ForeignKey("关联的表名"),默认关联表的主键

    def __str__(self):
        return self.name
    
#外键:一定是创建在数据表关系【一对多】中【多】的那个表中;
class Publish(models.Model):

    name=models.CharField(max_length=32)
    city=models.CharField(max_length=32)


class Author(models.Model):

    name=models.CharField(max_length=32)

备注:链接mysql数据库:Django框架(十):Models之ORM(sqilte数据库、mysql数据库在django中如何快速创建表,如何在pycharm中操作)_冷凝娇的博客-CSDN博客

如何针对表与表关系是一对多的情况,添加数据记录呢?(这里只说明操作)
解:有两种方式:
第一种方式:对数据库存储的外键赋值;即:publish_id
Book.objects.create(name="linux运维",price=5,pub_date="2019-12-12",publish_id=2)
#给包含外键字段的表添加一条记录,注意两点:
# 1.外键名一定是数据库存储的名称:自己命名外键名_id
# 2.外键所赋的值,一定要是关联的表中已存在的值,若不存在,就会报错
第二种方式:对自定义的外键赋值所关联表的一个关联值对象

获取对象赋给自定义外键名,出来filter查询出对象集合,也可用get,获取到单一的对象;

二、ORM多表操作之【一对多】查询记录

外键所在的表,【一对多】:表数据.自定义外键名------》一定是一个对象;

上面的原理可实现类似这样的功能:查询出人物A对应的身份证号码?

即:在外键所在的表查询出自命名外键对象,即关联表中想要的目标数据对象,再【.属性】获取字段值;

同样的道理,要实现类似于这样的功能:查询出B出版社所有的书籍?

就通过:在关联表中获取到外键id或者自命名外键对象,在外键所在的表查询出结果;

总结:一对多关系下,主表《--------》子表(外键所在的表)查询方式:

上面的两种方式,都是利用对象来查询,第三种查询方式,是利用:【fiter、values、双下划线】来查询;最常用的也是第三者;

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷凝娇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值