DJango 学习(7)—— orm 创建表关系
介绍
orm 中 如何定义三种关系
pulish = models.ForeignKey(to="Publish") # 默认和主键建立表关系
authors = models.ManyToManyField(to="Author")
author_detail = models.OneToOneField(to="Author_detail")
ForeignKey
OneToOneField
全自动在字段后面加 _id
在 django 1.x 中外键默认都时级联更新级联删除
代码演示
"""
表与表之间的关系
一对多
多对多
一对一
"""
图书表
出版社表
作者表
作者详情表
"""
图书和出版社是一对多的关系,外键字段建在多的一方,图书。
图书和作者是多对多关系,需要创建第三张表
作者和作者详情表是一对一的关系
"""
class User(models.Model):
# CharField 必须要有 max_length 参数,不指定会报错
# verbase_name 该参数是所有字段都有的,就是用来对字段的解释
# 相当于 id int primary key auto_increment
id = models.AutoField(primary_key=True, verbose_name="主键")
# name char(32)
name = models.CharField(max_length=32,verbose_name="用户名")
# password int
password = models.IntegerField(verbose_name="密码")
age = models.IntegerField(verbose_name="年龄")
info = models.CharField(verbose_name="个人简介", max_length=32, null=True) # 该字段可以为空
hobby = models.CharField(max_length=32, verbose_name="爱好", default="study") # 直接设置默认值
# 创建表关系,先创建基表,再创建外键字段
class Book(models.Model):
title = models.CharField(max_length=32, verbose_name="书名")
price = models.DecimalField(max_digits=8, decimal_places=2, verbose_name="价格")
# 8 8位数字,其中小数部分占两位
# 图书和出版社是 一对多 的关系,外键建在多的那张表上
pulish = models.ForeignKey(to="Publish") # 默认和主键建立表关系
# 如果字段对应的是 ForeignKey 那么 orm 会自动再字段的后面加 _id
# 如果写了 _id ,orm 也会再后面继续加 _id
# 后面在定义 ForeignKey 时不要加 _id
# 图书和作者是 多对多关系,外键建在哪张表都可以,并且不用建第三张表
authors = models.ManyToManyField(to="Author")
# authors 是虚拟字段,让 orm 直到作者和图书表是多对多关系,并且自动创建第三张表
class Publish(models.Model):
name = models.CharField(max_length=32, verbose_name="出版社名称")
addr = models.CharField(max_length=32, verbose_name="地址")
class Author(models.Model):
name = models.CharField(max_length=32, verbose_name="作者名")
age = models.IntegerField(verbose_name="年龄")
# 作者和作者详情表是 一对一 表关系
author_detail = models.OneToOneField(to="Author_detail")
class Author_detail(models.Model):
phone = models.BigIntegerField(verbose_name="联系方式")
addr = models.CharField(max_length=32, verbose_name="作者地址")