首页 > 编程 > Python > 正文

Django之模型层多表操作的实现

2020-02-16 00:31:15
字体:
来源:转载
供稿:网友

一、创建模型

1,一对多关系

一本书只有一个出版社,一个出版社可以出版多本书,从而书与出版社之间就构成一对多关系,书是‘多'的一方,出版社是‘一'的一方,我们在建立模型的时候,把外键写在‘多'的一方,即我们要把外键写在book类。

class Book(models.Model): name=models.CharField(max_length=15) price=models.IntegerField() publish=models.ForeignKey('Publish',on_delete=models.CASCADE) #这就是外键,其实是有三个参数的,第二参数是指向的字段,此处可以省略,他会自动指向id字段class Publish(models.Model): name=models.CharField(max_length=15) addr=models.CharField(max_length=15) phone=models.IntegerField()

在创建模型时不用创建id字段,在makemigrations命令输入之后,它会在migrations文件夹下生产一个py文件记录models.py里面所有的改动,在记录的时候就会自动给你加上自增长的主键字段id。

2,多对多关系

一本书可以有多个作者,一个作者可以写多本书,从而书和作者就构成了多对多的关系,我们在创建模型的时候,把多对多关系写在其中的任何一张表都可以。

class Book(models.Model): name=models.CharField(max_length=15) price=models.IntegerField() publish=models.CharField(max_length=15) author=models.ManyToManyField('Author',db_table='book_author')  这是创建关系表的代码,由于是写在book模型中的,所以第一个参数为另一张表Author,第二个参数为把关系表的名字改为‘book_author',如果不写,名字会是应用名_本模型名的小写_另一张模型名的小写。如‘app_book_author' class Meta:  这是把表名改为‘book',如果不写,表名为APP名_模型名,如'app_book'  db_table='book'class Author(models.Model): name=models.CharField(max_length=15) age=models.IntegerField() class Meta:  db_table='author'在创建第三张模型的时候也不用指定book的id和author的id,它会自动把两个模型的id字段写进去的

3,一对一关系

一个作者只能对应一个作者详细信息表,他们之间就是一对一关系,这和多对多一样的,关系写在哪张表都是可以的

class Author(models.Model): name=models.CharField(max_length=15) age=models.IntegerField() author_info=models.OneToOneField('Author_Info',on_delete=models.CASCADE)  这是一对一关系创建,第二参数是,自动跟随删除,当作者不在了,随即作者的信息也会删除 class Meta:  db_table='author'  class Author_Info(models.Model): gf_name=models.CharField(max_length=10) telephone=models.IntegerField() ShenFenZheng=models.IntegerField()

4,在此处我们可以使用Django的database:db.sqlite3

步骤如下:

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表