ORM概念:对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。
ORM优缺点:
下面要开始学习Django ORM语法了,为了更好的理解,我们来做一个基本的 书籍/作者/出版商 数据库结构。 我们这样做是因为 这是一个众所周知的例子,很多SQL有关的书籍也常用这个举例。
表(模型)的创建:
from django.db import models<br> class Publisher(models.Model): name = models.CharField(max_length=30, verbose_name="名称") address = models.CharField("地址", max_length=50) city = models.CharField('城市',max_length=60) state_province = models.CharField(max_length=30) country = models.CharField(max_length=50) website = models.URLField() class Meta: verbose_name = '出版商' verbose_name_plural = verbose_name def __str__(self): return self.name class Author(models.Model): name = models.CharField(max_length=30) def __str__(self): return self.name class AuthorDetail(models.Model): sex = models.BooleanField(max_length=1, choices=((0, '男'),(1, '女'),)) email = models.EmailField() address = models.CharField(max_length=50) birthday = models.DateField() author = models.OneToOneField(Author) class Book(models.Model): title = models.CharField(max_length=100) authors = models.ManyToManyField(Author) publisher = models.ForeignKey(Publisher) publication_date = models.DateField() price=models.DecimalField(max_digits=5,decimal_places=2,default=10) def __str__(self): return self.title
代码分析
综上所述,模型之间的关联由OneToOneField,ForeignKey,ManyToManyField外键字段实现的,每个字段设有特殊的参数,参数说明如下:
to :必须参数,关联的模型名称 on_delete:必须参数,设置数据的删除模式,删除模型包括:CASCADE,PROTECT,SET_NULL,SET_DEFAULT,SET和DO_NOTHING limit_choices_to:设置外键额下拉框选项,用于模型表单和Admin后台系统 related_name:用于模型之间的关联查询,如反向查询 related_query_name:设置模型的查询名称,用于filter和get查询,若设置related_name参数,则以该参数为默认值;如果没有设置,则以模型名称的小写为默认值; to_field:设置外键与其它模型字段的关联性,默认关联主键; db_constraint:在数据库里是否创建外键约束,默认True; swappable:设置关联模型的替换功能; symmetrical:仅限于ManyToManyField,设置多对多字段之间的对称模式; through:仅限于ManyToManyField,设置自定义模型C,用于关联和创建模型A和模型B的多对多关系; through_fields:仅限于ManyToManyField,设置模型C的字段,确认模型C哪些字段用于管理模型A和模型B的多对多关系; db_table:仅限于ManyToManyField,为管理和存储多对多关系的数据表设置名称。