057:表关系之一对多

表关系:
表之间的关系都是通过外键来进行关联的。而表之间的关系,无非就是三种关系:一对一、一对多(多对一)、多对多等。以下将讨论一下三种关系的应用场景及其实现方式。

一对多:
1. 应用场景:比如文章和作者之间的关系。一个文章只能由一个作者编写,但是一个作者可以写多篇文章。文章和作者之间的关系就是典型的多对一的关系。
2. 实现方式:一对多或者多对一,都是通过 ForeignKey 来实现的。还是以文章和作者的案例进行讲解。

models.py:

class Category(models.Model):
    username = models.CharField(max_length=128)
    def __str__(self):
        return "<Category: name:%s>" % self.username

class Article(models.Model):
    title = models.CharField(max_length=128)
    content = models.TextField()
    category = models.ForeignKey("Category", on_delete=models.CASCADE)
    # category = models.ForeignKey("Category", on_delete=models.CASCADE, related_name=‘articles‘)
    # user = models.ForeignKey(‘cms.user‘,on_delete=models.CASCADE, null=True)
    def __str__(self):
        return "<Article: title:%s, content:%s>" % (self.title, self.content)

views.py:

def index(request):
   # 第一种添加文章数据方式
    # category = Category(username="张三")
    # category.save()
    #
    # article = Article(title=‘1111‘, content=‘fuck you‘)
    # article.category = category
    # article.save()
    # print(article.category.username)
    # article.category.username = ‘李四‘
    # print(article.category.username)
   # 获取某类下的所有文章
    category = Category.objects.get(pk=2)
    aritcles = category.article_set.all()      # 谁引用了表的字段作为外键,就设置这个 "模型的_set" 方法获取数据
    # aritcles = category.articles.all()                    #如果模型中设置了: related_name=‘articles‘
   for article in aritcles:
    print(article)

   # 第二种添加文章数据方式
    article1 = Article(title=‘xyz‘, content="778899")
    category.article_set.add(article1,bulk=False)
    # category.articles.add(article1,bulk=False)            #如果模型中设置了: related_name=‘articles‘
   return HttpResponse(‘success‘)

原文地址:https://www.cnblogs.com/Carlos-Li/p/12111637.html

时间: 2024-10-17 08:31:40

057:表关系之一对多的相关文章

表关系(一对一,一对多,多对多)

可以在数据库图表中的表之间创建关系,以显示一个表中的列与另一个表中的列是如何相链接的. 在一个关系型数据库中,利用关系可以避免多余的数据.例如,如果设计一个可以跟踪图书信息的数据库,您需要创建一个名为 titles 的表,它用来存储有关每本书的信息,例如书名.出版日期和出版社.您也可能保存有关出版社的信息,诸如出版社的电话.地址和邮政编码.如果您打算在 titles 表中保存所有这些信息,那么对于某出版社出版的每本书都会重复该出版社的电话号码. 更好的方法是将有关出版社的信息在单独的表,publ

Hibernate多表关系

Hibernate多表关系 hibernate 一对多(多对一) 创建实体 配置ORM映射文件 创建测试文件 双方关系维护 级联操作 外键的维护权管理 双方关系维护.级联操作.外键维护权之间的关系 一对多(多对一) 在一个视频管理的系统中应该包含这样两个表讲课人Speaker.视频Video.其中一个讲课人可以讲多个视频,而一个视频只能属于一个讲课人:在这里Speaker就是一的状态,Video就是多的状态. 创建实体 在Speaker中添加set集合(如果添加list集合需要在配置文件中额外配

hibernate 表关系映射详解之一对多

一对多 传统模式:jdbc连接数据库的传统模式下,是通过主键连接外键实现一对多关系的映射, 其数据库中表的对应关系是在多方加入一方的主键,而后形成外键连接. Hibernate:引入hibernate框架后,通过类的形式来表示一对多的关系. 举例:订单与订单详细的关系,一个订单包含多个商品,多个商品属于一个订单,两者的关系是一对多的关系. 实现原理: 面向对象实现------ 在order类中加入item类的set集合 ,表示在订单类中包含有多个订单详细(集合表示). 层次结构: 步骤一:编写实

Php Laravel框架 多表关系处理 之 Eloquent一对多关系处理

Php Laravel框架 多表关系处理 之 Eloquent一对多关系处理 本博文主要介绍 Laravel 框架中 Eloquent  对一对多关系的处理,在 Laravel Administrator(后台扩展包) 您的数据库可能是彼此相关的.比如,一篇博客文章可能有许多评论,或者一个订单与下订单的用户相关.Eloquent 使得管理和处理这些关系变得简单.Laravel 提供了四种类型的关系: -一对一 -一对多 - 多对多 - 多态关系 一对多 一个一对多关系的例子是一篇博客文章有许多评

一对多的表关系 查询出一对一的显示

创建2张表  Table_A 和 Table_B  关系是一对多,   表Table_A.Id = Table_B.aId CREATE TABLE [dbo].[Table_A]( [Id] [char](36) NULL, [column1] [nvarchar](50) NULL, [column2] [nvarchar](50) NULL) ON [PRIMARY] CREATE TABLE [dbo].[Table_B]( [Id] [char](36) NULL, [aId] [ch

多表关系一对多和多对多

多表关系一对多和多对多 一.一对多 创建数据 一对多:外键必须放在多的一方,此时外键值不唯一 # 出版社(publish): id,name,address,phone create table publish( id int primary key auto_increment, name varchar(64), address varchar(256), phone char(20) ); # 书(book):id,name,price,publish_id, author_id crea

mysql表的一对一/一对多/多对多联系

1.数据库中的多对多关联关系一般需采用中间表的方式处理,将多对多转化为两个一对多. 2.通过表的关系,来帮助我们怎样建表,建几张表. 一对一 一张表的一条记录一定只能与另外一张表的一条记录进行对应,反之亦然. 学生表:姓名,性别,年龄,身高,体重,籍贯,家庭住址,紧急联系人 其中姓名.性别.年龄.身高,体重属于常用数据,但是籍贯.住址和联系人为不常用数据 如果每次查询都是查询所有数据,不常用的数据就会影响效率,实际又不用 常用信息表:ID(P),姓名,性别,年龄,身高,体重 不常用信息表:ID(

hibernate 建表一对一 就是一对多,多的一方外键唯一unique

Person.java 1 package cn.itcast.hiberate.sh.domain.onetoone; 2 3 import java.io.Serializable; 4 import java.util.Set; 5 6 public class Person implements Serializable{ 7 private Long cid; 8 private String cname; 9 private String description; 10 11 pub

Hibernate框架进阶(中篇)之多表关系

导读 Hibernate进阶主要分为上中下三篇,本文是中篇,主要讲解Hibernate框架中多表关系的实现.我们知道多表关系有一对一.一对多(多对一)和多对多三种关系.而1对1关系一般合并为一个表处理,所以本文主要讲解1对多和多对多关系的实现. 一.一对多关系 一对多的关系很多,比如人和籍贯就是一对多的关系,下面就用人和籍贯这个实例来展开说明. 1.数据库的实现 对于一对多关系的建立,我们通常是使用外键(foreign key)来表示.外键列添加在一对多的"多"这一方.这里用perso