Django丨多表实例

本文详细介绍了Django ORM操作多表的实例,包括一对一、一对多和多对多的关系建立,以及如何添加数据和进行跨表查询。通过示例展示了外键、ManyToManyField的使用,以及关联管理器的方法,如add、create、remove和clear等。
摘要由CSDN通过智能技术生成
ORM - 多表实例

表与表之间得关系分为三种

  • 一对一:一个人对应一个身份证号码,数据字段设置为unique。
  • 一对多:一个家庭有多个人,一般通过外键实现
  • 多对多:一个学生有多门课程,一个课程有多个学生,一般通过第三个表来实现关联

在这里插入图片描述

创建模型
class Book(models.Model):
    title = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=5, decimal_places=2)
    pub_date = models.DateField()
    publish = models.ForeignKey("Publish", on_delete=models.CASCADE)
    authors = models.ManyToManyField("Author")


class Publish(models.Model):
    name = models.CharField(max_length=32)
    city = models.CharField(max_length=64)
    email = models.EmailField()


class Author(models.Model):
    name = models.CharField(max_length=32)
    age = models.SmallIntegerField()
    au_detail = models.OneToOneField("AuthorDetail", on_delete=models.CASCADE)


class AuthorDetail(models.Model):
    gender_choices = (
        (0, "女"),
        (1, "男"),
        (2, "保密"),
    )
    gender = models.SmallIntegerField(choices=gender_choices)
    tel = models.CharField(max_length=32)
    addr = models.CharField(max_length=64)
    birthday = models.DateField()

说明:

  • EmailField数据类型是邮箱格式,底层继承CharField,进行了封装,相当于MySQL中的varchar。
  • Django1.1版本不需要级联删除:on_delete = models.CASCADE,Django2.2需要。
  • 一般不需要设置级联更新
  • 外键在一对多的多中设置:models.ForeignKey("关联类名", on_delete=models.CASCADE)
  • OneToOneField = Foreig
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值