详解Django的 create_or_update() 函数:创建或更新对象

  • Post category:Python

create_or_update() 是 Django 中一个非常有用的函数,可以用来根据给定的条件对数据库中的记录进行增删改查等操作。它的具体作用是:在数据表中创建新纪录,或是更新已存在的记录。

create_or_update() 函数的用法如下:

from django.db.models import F
from django.db.models import Q

Model.objects.update_or_create(
    defaults={},
    **kwargs
)

其中 Model 是你要进行操作的数据表对应的 Model 类。

defaults 参数是一个字典,用来指定要更新的字段及其对应的值。

**kwargs 是以键值对形式提供过滤条件。注意,至少有一个必须提供过滤条件,否则会抛出异常。

以下是两个实例说明:

  1. 假设我们有一个名为 Student 的 Model 类,它有三个字段:idnameage,其中 id 是自增主键。

现在我们要向数据库中添加一条新记录,如果数据库中已经有了这个学生的信息(即 nameage 的值都相同),则更新该学生的信息,否则直接添加一条新记录。代码如下:

python
Student.objects.update_or_create(
name='张三', age=18,
defaults={'name': '张三', 'age': 18}
)

如果数据库中不存在 nameage 均为 '张三'18 的记录,那么将创建一条新纪录,并返回创建的对象;否则,将更新已存在的记录。

  1. 假设我们有一个名为 Book 的 Model 类,它有三个字段:idnameprice,其中 id 是自增主键。

现在我们要更新 Book 表中所有价格为 50 的书名,将它们的价格改为 60。代码如下:

python
Book.objects.update_or_create(
price=50,
defaults={'price': F('price') + 10}
)

这里我们使用了 Django 中的 F 对象,它可以用来代表数据库中的字段或操作。在上面的例子中,F('price') 表示 price 字段的值,F('price') + 10 表示将 price 字段的值加上 10

以上就是 create_or_update() 函数的作用与使用方法的完整攻略。需要注意的是,这个函数的返回值是一个元组,包含两个值:更新后的对象以及一个 boolean 值,表示是创建了新纪录还是更新了已存在的记录。