目录
如何针对表与表关系是一对多的情况,添加数据记录呢?(这里只说明操作)
第一种方式:对数据库存储的外键赋值;即:publish_id
一、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、双下划线】来查询;最常用的也是第三者;