【Django入门】——模型类的关联关系简介

【Django入门】——Django中通过模型类实现数据表基本操作中,我们提到了通过模型类创建的数据表之间会具有一对多关系。

实际上,这些数据表之间还有多对多一对一的关系:

1. 多对多

例如,在实际中,假设有一个新闻类以及一个新闻类型类。我们知道一篇新闻可以是体育新闻类型,也可以是国际新闻,还可以既是体育新闻也是国际新闻;反之,体育新闻类型或国际新闻分类下,都可以有多篇新闻。

如果想要指定通过模型类创建的数据表之间存在多对多这样的关系,可以在定义模型类时使用models.ManyToManyField()来定义一个类属性,而该类属性无论定义在新闻类还是新闻类型类都可以。例如:

# 新闻类型类
class NewsType(models.Model):
    # 新闻类型名称
    type_name = models.CharField(max_length=20)
    # 关系属性,代表类型下面各篇新闻
    # news = models.ManyToManyField('News')
    
    
# 新闻类
class News(models.Model):
    # 新闻标题
    title = models.CharField(max_length=20)
    # 发布时间
    pub_date = models.DateTimeField(auto_now_add=True)  # 以当前时间作为新闻的出版时间
    # 新闻内容
    content = models.TextField()
    # 关系属性,代表新闻所属的类型
    new_type = models.ManyToManyField('NewsType')

2. 一对一

例如,在实际中,假设有一个员工基本信息类和一个员工详细信息类,则通过这两个模型类创建的数据表,其中一个数据表中的数据和另一个数据表中的数据是一一对应的。

如果想要指定通过模型类创建的数据表之间存在一对一的关系,可以在定义模型类时使用models.OneToOneField()来定义一个类属性。同样地,该类属性可以定义在员工基本信息类或员工详细信息类。例如:

# 员工基本信息类
class EmployeeBasicInfo(models.Model):
    # 员工姓名
    name = models.CharField(max_length=20)
    # 员工性别
    gender = models.BooleanField(default=False)
    # 员工年龄
    age = models.IntegerField()
    
    
# 员工详细信息类
class EmployeeDetailedInfo(models.Model):
    # 联系地址
    address = models.CharField(max_length=256)
    # 关系属性,代表员工基本信息
    employee_basic_info = models.OneToOneField('EmployeeBasicInfo', models.CASCADE)
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值