django——多表创建,添加纪录,查询

MySQL中表之间的关系

与MySQL中表之间的关系类似:
一对多,多对多,一对一。
mysql建立关系方法:
https://blog.csdn.net/Light__1024/article/details/88344675
https://blog.csdn.net/Light__1024/article/details/88342893

django中处理方法:

  • 一对多,在多的表中建立关联字段
  • 多对多,建立第三张关系表关联俩表
  • 一对一,表中建立关联字段 + unique设置成唯一
  • 可以建立关联字段,但不一定非要建立约束关系。

orm生成关联表模型

以出版社,书,作者,作者详情四张表为例,出版社和书是一对多,书和作者是多对多,作者和作者详情表是一对一。

1、建立被关联的单表,出版社表和作者详情表

# 作者详情表
class AuthorDetail(models.Model):
    nid = models.AutoField(primary_key=True)
    birthday = models.DateField()
    telephone = models.BigIntegerField()
    addr = models.CharField(max_length=64)


# 出版社表
class Publish(models.Model):
    nid = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32)
    city = models.CharField(max_length=32)
    email = models.EmailField()

2、建立一对多,多对多

class Book(models.Model):
    nid = models.AutoField(primary_key=True)
    title = models.CharField(max_length=32)
    publishDate = models.DateField()
    price = models.DecimalField(max_digits=5, decimal_places=2)

    # 一对多关系,在book里生成字段,关联字段publish自动拼_id, to=位置表,to_field=字段,不加默认主键id
    # 只要用到foreign key 要加上 on_delete=models.CASCADE 2.0以上不加报错
    publish = models.ForeignKey(to="Publish", to_field="nid", on_delete=models.CASCADE, )
    '''
        publish_id INT ,
        FOREIGN KEY (publish_id) REFERENCES publish(id)

    '''

    # 多对多,不在book里生成字段,会生成第三表,名字由语法坐在表book和定义authors自动拼成是book_authors
    authors = models.ManyToManyField(to="Author")

    '''
    CREATE  TABLE book_authors(
       id INT PRIMARY KEY auto_increment ,
       book_id INT ,
       author_id INT ,
       FOREIGN KEY (book_id) REFERENCES book(id),
       FOREIGN KEY (author_id) REFERENCES author(id)
        )
    '''

3、一对一

class Author(models.Model):
    nid = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32)
    age = models.IntegerField()
    # 一对一,表名加引号从全局找,不加引号受建表顺序影响。
    authordetail = models.OneToOneField(to="AuthorDetail", to_field="nid", on_delete=models.CASCADE)

4、数据库迁移

    python manage.py makemigrations
    python manage.py migrate

在这里插入图片描述

  • 表的名称myapp_modelName
  • 外键字段,Django 会在字段名上添加"_id" 来创建数据库中的列名
  • 外键字段
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值