映射关系:
表名 <-------> 类名
字段 <-------> 属性
表记录 <------->类实例对象
创建表(建立模型)
在Django的ORM中,不同于我们尝试用的mysql,这里数据库中的一张表,相当于我们在python中的一个类,在我们创建一个类,给他设定属性的时候,就相当于是在给这个表添加字段,实例化的一些属性,就是给这个字段添加的约束等。
在建立模型的时候,我们要考虑到表与表之间的联系。
一对一
一对一的关系,就例如我们一个人会有很多资料,我们会有住址,手机号,专业技能等,这些资料只与我们本身一一对应,这就是一个一对一的关系。
我们在建立一对一的关系时,使用的是models.OneToOneField,在设置这个关联属性的时候,在一对一的哪一张表上建立都是同样的。
一对多
一对多的关系,就如同一个班级可以由多个学生,然而一个学生只能有一个班级一样,
我们在建立一对多的关系时,使用的是models.ForeignKey,也就是mysql中的外键约束,将外键约束建在关系多的那张表上,例如一个班级可以有多个学生,那么我们的外键就创建在学生表上。
多对多
多对多的关系,就如同一个老师可以教多个班级,一个班级可以由多个老师一样。
我们在建立多对多的关系时,使用的是models.ManyToManyField,多对多关系的建立,需要另外一张关联表,这个方法就是Django帮助我们建立了第三章关系表的,我们可以通过第三张表来练习多对多的两张表的联系。
1 class Book(models.Model): 2 title=models.CharField(max_length=32) 3 publishDate=models.DateField() 4 price=models.DecimalField(max_digits=5,decimal_places=2) 5 publish=models.ForeignKey("Publish") 6 authors=models.ManyToManyField("Author") 7 class Publish(models.Model): 8 nid=models.AutoField(primary_key=True) 9 name=models.CharField(max_length=32) 10 email=models.EmailField() 11 class Author(models.Model): 12 name = models.CharField(max_length=32) 13 age=models.IntegerField() 14 class AuthorDetail(models.Model): 15 addr = models.CharField(max_length=32) 16 email = models.EmailField() 17 author=models.OneToOneField("Author")