表的关系有哪些

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 多对一(最常用)

  • 多对多

  • 总结


多对一(最常用)

相当于mysql中的外键
外键的作用:外键是一种约束,不是让2张表产生关系的,可以限制外键字段更新和插入
    
定义模型类
Cate:cate_name  分类名
Movies:电影名 票价 所属分类
    
多对一的添加:
    一种是根据外键字段进行添加  外键字段 = 对象
    一种是根据外键_id进行添加  外键字段_id = id
查询:
    由多查一(通过点影查分类):
    由一查多(通过分类查询点影):

多对多

一个音乐家可以隶属很多个乐队
一个乐队也可以有很多个音乐家
class Artist(models.Model):
    artist_name = models.CharField(max_length=30,verbose_name="音乐家名字")
    # 定义元类
    class Meta:
        db_table = "artist"
    def __str__(self):  # 返回对象的描述信息
        return self.artist_name

# 定义乐队模型类
class Band(models.Model):
    band_name = models.CharField(max_length=30,verbose_name="乐队名")
    # 多对多就不需要写on_delete:因为本身2张表之间没有任何关系,是第三张表专门存储关系
    artist = models.ManyToManyField(Artist)
    # 定义元类
    class Meta:
        db_table = "band"
    def __str__(self):  # 返回对象的描述信息
        return self.band_name
    
1.添加音乐家    模型类.objects.create()
a1 = Artist.objects.create(artist_name="爱德华")
a2 = Artist.objects.create(artist_name="刘德华")

2.在添加乐队
b1 = Band.objects.create(band_name="摇滚天团")
b2 = Band.objects.create(band_name="爱德华天团")

3.将音乐家添加到乐队里
--b1这个乐队有2个音乐家 分别是 爱德华(a1) 刘德华(a2)
b1.artist.add(a1,a2)

--b2这个乐队只有一个音乐家就是爱德华
b2.artist.add(a1)

正向查询:
    查看一下b1乐队的成员
    b1.artist.all()
    查看一下b2乐队的成员
    b2.artist.all()
反向查询:
    查询a1加入的乐队
    a1.band_set().all()
    
解除a2和b1乐队的关系  remove
在b1乐队中解除a2这个音乐家
b1.artist.remove(a2)  # 只是解除音乐家和乐队之间的关系,并不是删除数据

总结

不管是多对一还是多对多

都需要注意查询,尤其是反向查询_set()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值