多对多关系
多对多关系可以是具有关联,也可以是没有关联,所以不需要明确指定on_delete属性
django.db import models # 一个乐队可以有很多音乐家,一个音乐家也可以隶属好多个乐队 # 定义音乐家模型类 class Artist(models.Model): artist_name = models.CharField(max_length=20,verbose_name="音乐家名字") # 定义元类 class Meta: db_table = "artist1" def __str__(self): return self.artist_name # 定义乐队模型类 class Band(models.Model): band_name = models.CharField(max_length=20,verbose_name="乐队名") # 多对多 artist = models.ManyToManyField(Artist) # 定义元类 class Meta: db_table = "band" def __str__(self): return self.band_name
# 在多对多的情况,有专门的第三张表,存储 对应关系, 表本身并没有字段来存储对应关系,此时删除任意数据,不影响另一张表数据
添加音乐家语法: 模型类.objects.create() a1 = Artist.objects.create(artist_name="朗朗") a2 = Artist.objects.create(artist_name="李健") 添加乐队语法: 语法: b1 = Band.objects.create(band_name="破吉他乐队") b2 = Band.objects.create(band_name="凯乐乐队")
# b1这个乐队有2个音乐家分别是a1和a2 将a1和a2添加到b1这个乐队里 b1.artist.add(a1,a2) # b2这个乐队有一个音乐家是a2 b2.artist.add(a2)
多对多关联字段的删除,要使用remove来进行关系的断开 而不是直接使用delete,
在B1乐队中删除A1乐家
多对多关联字段的删除,要使用`remove`来进行关系的断开
而不是直接使用`delete`,`remove`只会断开数据之间的联系,但是不会将数据删除
在B1乐队中删除A1乐家
# 通过外键查询该乐队的全部音乐家 # 查看b1乐队的成员 b1.artist.all() # 查看b2乐队的成员 b2.artist.all() # 反向查询:通过音乐家,查询该音乐家加入的乐队信息 # 查看a2这个音乐家所属的乐队 a2.band_set.all()

浙公网安备 33010602011771号