模型类的多表操作
本节目表
- 模型类一对多、多对多定义
- 外键维护关系定义
- 自关联案例
外键的种类
关键字 | 说明 |
---|---|
ForeignKey | 一对多 |
ManyToManyField | 多对多 |
OneToOneFiled | 一对一 |
外键的常用参数
关键字 | 说明 |
---|---|
to | 引用的模型类(自关联‘self’) |
on_delete | 外键约束:models.CASCADE 级联操作(多对一,一的一方删除,多的一方也删除) models.PROTECT 报异常(被引用的一方不能删除) models.SET_NULL 设置为null(多对一,一的一方删除,多的一方外键为null) models.DO_NOTHING 什么也不做 |
related_name | 反向引用,如果两个表间有多种外键关系,需要指明related_name 如果指明,默认是【模型类小写】_set |
一对多及多对多的基本操作:
class User2(models.Model):
username = models.CharField(max_length=16)
class News(models.Model):
topic = models.CharField(max_length=100)
sender = models.ForeignKey(
to=User2,on_delete=models.CASCADE,related_name=‘sender_set’)
collectors = models.ManyToManyField(to=User2,related_name=‘collectors_set’)
edu.youkuaiyun.com
news.sender → User Object news.collectors.all()
user.sender_set.all() user.collectors_set.all()
user.sender_set.add(news) user.collectors_set.add(news)
user.sender_set.remove(news) user.collectors_set.remove(news)
自关联
class Area(models.Model):
name = models.CharField(max_length=10)
pArea = models.ForeignKey(to=‘self’,null=True,on_delete=models.CASCADE)
edu.youkuaiyun.com
area.pArea → Area Object
area.area_set.all() → QuerySet