关于关系表

关于关系表

老师,您好:
一对一关系的时候,老师在进行关联的时候定义一个类进行关联student类,然后在下面创建了其他的字段和对应的内容,到一对多也是如此,但是为什么到多对多的时候并没有创建其他的字段和对应的内容呢?就只有课程的id和学生的id,其他字段不能够添加吗?可以的话,是如何添加的?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学,你好,

1、多对多关联时,Django会自动创建一张表用于两张表的相关联。该表中是通过两个表的id进行关联

http://img1.sycdn.imooc.com//climg/5f8c0f5d09d5fd2d03380173.jpg

2、也可以自定义中间表,Django提供了一个through参数,用于指定中间模型,可以将其他字段放在这个中间模型内。

参考代码:

class Person(models.Model):
    name = models.CharField(max_length=128)

class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(Person, through='Membership')
       
class Membership(models.Model):
    person = models.ForeignKey(Person, on_delete=models.CASCADE)
    group = models.ForeignKey(Group, on_delete=models.CASCADE)
    date_joined = models.DateField()        # 进组时间
    invite_reason = models.CharField(max_length=64)  # 邀请原因


  • 为学习而奋斗 提问者 #1
    members = models.ManyToManyField(Person, through='Membership') class Membership(models.Model): person = models.ForeignKey(Person, on_delete=models.CASCADE) group = models.ForeignKey(Group, on_delete=models.CASCADE) date_joined = models.DateField() # 进组时间 invite_reason = models.CharField(max_length=64) # 邀请原因 这一段不太懂,老师能不能解释一下
    2020-10-18 18:32:54
  • 好帮手慕美 回复 提问者 为学习而奋斗 #2
    同学,你好。Membership()是自定义的多对多的中间表,前两个字段关联的是Person()表和Group()表,实现多对多关系,剩下两个字段是该表中的其他的字段。 祝学习愉快~~~~
    2020-10-18 18:38:39
  • 为学习而奋斗 提问者 回复 好帮手慕美 #3
    那老师on_delete=models.CASCADE这是什么意思呢?
    2020-10-18 19:13:50
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
3.从网页搭建入门Python Web
  • 参与学习           人
  • 提交作业       218    份
  • 解答问题       3562    个

本阶段带你用Python开发一个网站,学习主流框架Django+Flask是Python Web开发的第一步,在基础知识上实现积分商城的项目开发,体验真实的项目开发流程,提高解决编程问题和效率的能力。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师