059:表关系之多对多

表关系之多对多场景:

1、应用场景:比如文章和标签的关系。一篇文章可以有多个标签,一个标签可以被多个文章所引用。因此标签和文章的关系是典型的多对多的关。
2、实现方式:Django 为这种多对多的实现提供了专门的 Field 。叫做 ManyToManyField 。还是拿文章和标签为例进行讲解。

示例代码如下:

# models.py文件内容:
class Tag(models.Model):
    tname = models.CharField(max_length=100)

class Article(models.Model):
    title =models.CharField(max_length=100)
    content = models.TextField()
    tags = models.ManyToManyField(‘Tag‘)         # 当然也可以加上:related_name="information" 这样的字段内容

# views.py文件内容:
def index(request):
    # tag1 = Tag(tname="扎心了")
    # tag1.save()
    # article1 = Article(title="fuck1", content="fuck ")
    # article1.save()
    # 两种添加方式:
    # tag1.article_set.add(article1)
    # article1.tags.add(tag1)  
   # 获取某类标签所有文章的方法:
    tags = Tag.objects.get(pk=1)
    artiles = tags.article_set.all()
    for artile in artiles:
        print(artile)
    return HttpResponse(‘success‘)

注意:多对多的方式中不可用使用bulk=False方式,随便就忘记吧(可以看一下57节内容)

原文地址:https://www.cnblogs.com/zheng-weimin/p/10227862.html

时间: 2024-08-30 16:44:33

059:表关系之多对多的相关文章

Hibernate多表关系配置——多对多对关系映射

多对多关系:第一个表中的一个行可以与第二个表中的一个或多个行相关.第二个表中的一个行也可以与第一个表中的一个或多个行相关. 一般的设计中,多对多关联映射,需要一个中间表 Hibernate使用many-to-many标签来表示多对多 多对多的关联映射,在实体类中,跟一对多一样,也是用集合来表示的 1.实体 1.1 课程实体 package demo.entity; import java.util.HashSet; import java.util.Set; /** * 课程实体 * @auth

Hibernate多表关系配置——多对一关系映射

班级和学生两个实体类,关系如下: 多对一(many-to-one):多个学生属于一个班级 一对多(one-to-many):一个班级有多个学生 1.班级实体 package demo.entity; import java.util.HashSet; import java.util.Set; /** * 班级 * @author Don * @date:日期:2017年4月10日 时间:下午4:51:56* * @version 1.0 */ public class Cla { privat

数据库表关系(一堆垛,多对多)

1.记住,永远记住:表与表之间关联的唯一手段就是外键 表与表之间相关联只能通过外键. 2.所以数据库表与表之间的,一对多,多对多关系.说白了就是怎样建立外键的关系,在哪个表建立外键. 通过外键维持各种表之间的关系. 3. 6 表与表之间的关系 l 一对一:例如t_person表和t_card表,即人和身份证.这种情况需要找出主从关系,即谁是主表,谁是从表.人可以没有身份证,但身份证必须要有人才行,所以人是主表,而身份证是从表.设计从表可以有两种方案: 在t_card表中添加外键列(相对t_use

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

举例:商品类型表与商品表,每种类型对应多个商品,每个商品对应多种类型 关系图: hirbernate实现多对多映射有两种方法,第一种是通过中间表直接映射,第二种是通过中间表间接映射. 直接映射: 配置实体类(因为都是多对多的关系,所以双方都具有set集合): 配置实体类的映射文件: 分析:category类先通过category_Id与中间表tb_category_product建立联系,然后再通过多对多标签中的porduct_id与product类建立多对多联系. product类同上类似.

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

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

多表关系一对多和多对多

多表关系一对多和多对多 一.一对多 创建数据 一对多:外键必须放在多的一方,此时外键值不唯一 # 出版社(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

创建多对多表关系的三种方式

创建多对多表关系的三种方式 在我们之前创建多对多表的时候,一直用的都是全自动的方式来创建第三张表的. 1.全自动(推荐使用**) 好处在于 django orm会自动帮你创建第三张关系表 但是它只会帮你创建两个表的关系字段 不会再额外添加字段 虽然方便 但是第三张表的扩展性较差 无法随意的添加额外的字段 class Book(models.Model): ... authors = models.ManyToManyField(to='Author') class Author(models.M

数据库表关系:多对多的三中方式

1.第一种django orm在创建表的时候自动帮我们创建表关系 from django.db import models # Create your models here. #创建book表 class Book(models.Model): name=models.CharField(max_length=32) # 第一种方式,系统帮我们自动创建了表book与表author关系 authors=models.ManyToManyField(to='Author') #创建作者表 clas

Hibernate多表关系

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