前面几篇随笔的数据库增删改查操作都是在单表的操作上的,然而现实中不可能都是单表操作,更多的是多表操作,一对一,一对多,多对多的表结构才是我们经常需要处理的,本篇将带我们了解多表操作的一些相关操作。也会带着大家做一个简单的图书管理的小练习。

 

本篇导航:

 

一、建表

本篇继续以图书管理的例子。

模型:书籍有书名、作者、出版日期、价格,出版社,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);一本书只应该由一个出版商出版,所以出版商和书籍是一对多关联关系(one-to-many)。

1、准备工作

1)创建一个项目

2)提前在mysql数据库里建立一个库

3)修改相关setting配置。(详情可以参考前面63、64、65三篇随笔)

2、建表

你如果在建表时没有添加主键,django会自动给我们的表添加一个主键id,是不是很棒0.0

1)语法

一对一:
models.OneToOneField() ===>models.ForeignKey(,unique="True")
一对多:
models.ForeignKey()
多对多:
models.ManyToManyField()

属性:
related_name=""    
可选属性用来给此次关联起名,如果不用此属性django会自动给一个名字后面查询的例子会说明(是关联的名字不是字段名)

2)建表实例

#图书表
class Book(models.Model) :
    title = models.CharField(max_length=32)
    publishDate = models.DateField()
    prince = models.DecimalField(max_digits=5,decimal_places=2)
    
    publish = models.ForeignKey("Publish")  #一对多
    
    authorlish = models.ManyToManyField("Author")   #多对多

    def __str__(self) :
        return self.title

#出版社
class Publish(models.Model) :
    name = models.CharField(max_length=32)
    addr = models.CharField(max_length=32)

    def __str__(self) :
        return  self.name

#作者表
class Author(models.Model) :
    name = models.CharField(max_length=32)
    sex = models.CharField(max_length=32)
    age = models.IntegerField()
    tel = models.CharField(max_length=32)
    addr = models.CharField(max_length=32)
    
    def __str__(self) :
        return  self.name
图书、出版社、作者

相关文章:

  • 2021-05-02
  • 2022-12-23
  • 2022-02-03
  • 2022-12-23
  • 2021-05-18
  • 2020-03-14
  • 2021-11-12
  • 2021-06-10
猜你喜欢
  • 2021-09-10
  • 2021-10-08
  • 2022-02-03
  • 2021-08-06
  • 2022-01-09
相关资源
相似解决方案