zoukankan      html  css  js  c++  java
  • Django day08 多表操作 (一) 多表模型创建

    多表模型创建分析:
    1)作者表:一个作者有姓名和年龄
    2)作者信息表: 有作者就有信息,点击作者的名字可以查询他的电话和地址, 作者表对应作者信息表,所以他们之间是一对一对的关系
    3)出版社表: 出版社有对应城市地址和邮箱号
    4)书籍表: 包含了书名和价格,还有写这本书有哪些作者,一本书可以有多个作者来写,也可以是一个作者写多本书,所以书籍 和作者是多对多的关系;
    一本书对应一个出版社, 一个出版社又可以出多本书, 所以书籍和出版社是一对多的关系


    用了OneToOneField和ForeignKey,模型表的字段,后面会自定加_id
    ManyToManyField会自动创建第三张表

    *************重点*************
    一对一的关系:OneToOneField
    一对多的关系:ForeignKey
    多对多的关系:ManyToManyField
    ******************************

    在Models创建如下模型:
    # 出版社表
    class Publish(models.Model):
        # id 如果不写,会自动生成,名字叫nid, 并且自增
        id = models.AutoField(primary_key=True)
        name = models.CharField(max_length=32)
        addr = models.CharField(max_length=64)
        email = models.EmailField()
    
    
    # 作者表
    class Author(models.Model):
        id = models.AutoField(primary_key=True)
        name = models.CharField(max_length=32)
        # 数字类型
        sex = models.IntegerField()
        # 可以用ForeignKey,但是要设置唯一约束,会报警告,不建议用,建议用OneToOneField
        # AuthorDetail= models.ForeignKey(unique=True)
        # to ='AuthorDetail' 加了引号,只要 class AuthorDetail 这个表在这个页面上能找到就行,不需要引用,
        # to ='AuthorDetail'  如果不加引号,就只能写在这个表的上面创建 class AuthorDetail 这个表,必须在上面定义类
        AuthorDetail = models.OneToOneField(to='AuthorDetail', to_field='id')
    
        def __str__(self):
            return self.name
    
    # 作者信息表
    class AuthorDetail(models.Model):
        id = models.AutoField(primary_key=True)
        phone = models.CharField(max_length=32) # 电话
        addr = models.CharField(max_length=64) #地址
    
    
    # 书籍表
    class Book(models.Model):
        id = models.AutoField(primary_key=True)
        name = models.CharField(max_length=32)
        price = models.DecimalField(max_digits=5, decimal_places=2)
        publish = models.ForeignKey(to=Publish, to_field='id')  # 出版社的关系一对多
        # 一对多的关系一旦确立,关联字写在多的一方
        author = models.ManyToManyField(to=Author)
    
        def __str__(self):
            return self.name

    注意事项:

    写完以上代码后, 在导航栏中找到 Tools ---> Run manage.py Task... 点击后如图:

    在里面输入:

      -python3 manage.py makemigrations ------> 只是对数据变更做记录

      -python3 manage.py migrate ------> 把变更的数据同步到数据库

    操作完以上步骤后打开mysql数据库刷新即可

  • 相关阅读:
    三数之和
    罗马数字与整数
    Oracle 开启或关闭归档
    Oracle RMAN scripts to delete archivelog
    Oracle check TBS usage
    Oracle kill locked sessions
    场景9 深入RAC运行原理
    场景7 Data Guard
    场景4 Data Warehouse Management 数据仓库
    场景5 Performance Management
  • 原文地址:https://www.cnblogs.com/zedong/p/9951236.html
Copyright © 2011-2022 走看看