一对一关联关系
数据库体现 |
Django程序模型 |
通过外键关联,外键要设置在多的一方 |
OneToOneField() |
#在 models 文件里设置 class 属性 OneToOneField
#关联属性要设置在后边的类里,不然会报错。因为程序是按顺序执行的。
#一般关联属性直接设置为前者类名,关系设定后直接调用对应的类名即可
class Boy(models.Model):
.....
class Girl(models.Model):
......
boy=models.OneToOneField(Boy,null=True,blank=True)
#根据实际选择是否为空(null=True,blank=True),允许为空的话添加对象时可以先没有关联对象;
#关联属性如果不为空,添加对象时必须把关联对象一并添加,否则无法创建对象。
- 注意事项
- 如果前期双方没有关联,后期添加对关联属性时,应都通过后一个class(设置有一对一关系属性的类)添加,不然无法添加关联属性
# 如:Girl类里设置有Boy属性。在选择关联属性配偶保存时,女选男用:
girl.boy=boy
girl.save()
# 当男选女时一样用女类来保存关联属性男,使双方关联。
一对多关联关系
- 使用方法
- eg:一个人可以有多个手机号,但一个手机号只能属于一个人
数据库体现 |
Django程序模型 |
通过外键关联,外键设置在多的一方 |
models.ForeignKey() |
中间表关联,多的一方要设置唯一约束 |
primary key() 也是主键 |
- 注意及小方法
- 手机号一定属于一个人,不能为空
- 创建属性时多的一方要有对应类的一个对象
- 查找一个对象关联对象的 所有
- models.User.objects.say_set.all
多对多关联关系
- 使用方法
- eg:老师和学生的关系~一个老师有多个学生,一个人学生有多个老师
数据库体现 |
Django程序模型 |
中间表关联 |
models.ManyToManyField() |
- 注意
- 多对多的关系一般都会虚拟一个中间项,拆分为多个一对多的关系
- eg~用户和商品之间的关系(一个用户可以买多个商品,一件商品被多个用户购买),这个时候就会虚拟一个购物车(虚拟中间项),拆分为多个一对多的关系.
附加
- 网站不同用户不同菜单实现
- 定义Type类型, User类型(一对多Type), Menu类型(一对多Type)
- Type有两个对象~用户和管理员
- Menu类型~不同的Type类型可以读取不同的菜单列表
- User 通过与 type 的关联实现不同用户的不同类型 menu
网友评论