Django入门系列3-使用django的ORM操作数据库
本文旨在介绍如何利用Django框架的ORM(对象关系映射)系统来定义数据库表结构,以及如何执行数据的增加、删除、更新和查询等基本操作。
1.myapp/models.py
这里介绍了常用的一对多和多对多关系的创建方法,此处使用了django提供的外键,也可以使用逻辑外键来完成。
1 | from django.db import models |
on_delete参数
-
CASCADE
:级联删除。当你删除Author记录时,与之关联的所有 Article 都会被删除。 -
PROTECT
: 保护模式。如果有外键关联,就不允许删除,删除的时候会抛出ProtectedError错误,除非先把关联了外键的记录删除掉。例如想要删除Author,那你要把所有关联了该Author的Article全部删除才可能删Author。 -
SET_NULL
: 置空模式。删除的时候,外键字段会被设置为空。删除Author后,Article 记录里面的author_id 就置为null了。 -
SET_DEFAULT
: 置默认值,删除的时候,外键字段设置为默认值。 -
SET
: 自定义一个值。 -
DO_NOTHING
:什么也不做。删除不报任何错,外键值依然保留,但是无法用这个外键去做查询。
related_name参数
related_name
参数用于ForeignKey
、OneToOneField
和ManyToManyField
字段中,它定义了反向关系的名称。这个参数允许你从关联的对象访问当前模型的实例。如Author对象通过author_articles
属性访问Article对象列表。
其他内容
- 一对一关系类型
OneToOneFiled
的使用场景相对其他两种关系要少,经常用于对已有模型的扩展。 - 在Django ORM中,模型的元数据设置是通过在模型内部定义一个名为
Meta
的类来完成的。这个类提供了多种选项,允许你控制模型的行为和数据库表的属性。 - 在Django中,模型继承是一个强大功能,它允许你通过继承一个模型来创建新的模型。Django支持三种类型的模型继承:抽象继承、单表继承、多表继承。
2.myapp/serializers.py
在Django REST Framework中,涉及到复杂的嵌套模型关系时,一般需要重写序列化器的create
和update
方法。其在创建或更新数据时触发,若初始化序列化器实例时传递了instance参数,则在调用save
方法时触发update
,否则触发create
方法。下一篇文章将继续介绍序列化类的使用和编写方法。
1 | from rest_framework import serializers |
3.myapp/views.py
此处是视图函数代码,drf还提供了视图类和视图集来简化视图函数的代码,但是是以牺牲可读性为代价的,这里不作介绍。
1 | from rest_framework import status |
4.myapp/urls.py
将视图与 URL 路由关联:
1 | urlpatterns = [ |
5.测试
1 | # docker-compose重新构建web |