详解Django的 get_or_create() 函数:获取或创建一个对象

  • Post category:Python

Django中的get_or_create()函数的作用是尝试从数据库中获取一个对象,如果不存在则创建一个新的对象。该函数有以下两个参数:

  1. defaults: 可选参数,用于在创建新对象时指定字段的默认值,应该是一个字典类型。
  2. 其他参数:可以是任何由Model.objects.filter()函数接受的参数,用于获取已存在的对象。

使用方法如下:

obj, created = MyModel.objects.get_or_create(field1=value1, field2=value2, ...)
  • obj表示获取到的现有对象或者新创建的对象。
  • created表示标志位,表示对象是新创建的还是现有的对象。如果是新创建的对象,则created的值为True,否则为False

下面是一些使用get_or_create()函数的例子:

  1. 创建一条记录:
from myapp.models import Kitty

kitty, created = Kitty.objects.get_or_create(name="小貓")

如果数据库中没有名称为“小貓”的Kitty对象,则get_or_create()函数会为其创建一个新的对象。

  1. 获取一个现有的记录:
from myapp.models import Kitty

kitty, created = Kitty.objects.get_or_create(name="小花")

如果数据库中存在名称为“小花”的Kitty对象,则get_or_create()函数会将其返回,且created的值为False

  1. 使用defaults选项创建记录:
from myapp.models import Kitty

kitty, created = Kitty.objects.get_or_create(name="小老鼠", defaults={"color": "灰色"})

如果数据库中没有名称为“小老鼠”的Kitty对象,则get_or_create()函数会创建一个新的对象,并将color字段的默认值设置为“灰色”。

  1. 传递多个筛选条件:
from myapp.models import Kitty

kitty, created = Kitty.objects.get_or_create(name="小老鼠", color="白色")

如果数据库中不存在名称为“小老鼠”且颜色为“白色”的Kitty对象,则get_or_create()函数会创建一个新的对象。如果存在,则会返回该对象,且created的值为False

综上所述,get_or_create()函数是一个非常方便的函数,可以大大简化我们对数据库的操作。