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数据库刷新即可

  • 相关阅读:
    smarty对网页性能的影响
    php-fpm正在生成页面时,浏览器刷新后,php-fpm会退出吗?
    为什么日志记录到别的目录了?
    一个空格引发的bug
    linux内核--页高速缓存
    radix树
    linux内核--用户态内存管理
    linux内核--内核内存管理
    linux内核--软中断与tasklet
    linux内核--几个上下文(context)
  • 原文地址:https://www.cnblogs.com/zedong/p/9951236.html
Copyright © 2011-2022 走看看