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

  • Post category:Python

关于Django的get_or_create()函数,我来为您详细解释一下。

1. get_or_create()的作用

get_or_create()函数的作用是使用给定的数据字典尝试获取一个对象,若对象存在,则直接返回该对象;若对象不存在,则使用给定的数据字典创建一个新的对象。

这个方法使用于在查询一个对象是否存在的情况下,如果存在则获取该对象,如果不存在则创建该对象。通过使用get_or_create()方法,我们可以方便地实现查询或新增功能。

2. get_or_create()的使用方法

语法:(注:以下参数中,除了defaults参数外,其他参数均为必需参数)

SomeModel.objects.get_or_create(defaults=None, **kwargs)

get_or_create()函数接收以下可选参数:

参数名 类型 描述
defaults 字典 如果执行创建操作,则使用这些默认值作为新创建对象的属性。
**kwargs 字典 用来查询并获取一个对象的参数。
using 字符串 尽管默认使用默认数据库,但这里您可以指定不同的数据库在查找对象和创建新对象时使用。
return_created bool 如果这个参数设置为真,get_or_create将返回一个元组,其中第一个元素是找到的对象,第二个元素是一个表示对象是否重新创建的布尔值。此参数仅适用于Django 1.9及更高版本。默认值为 False。

其中,defaults参数可视为一个关键参数。如果使用create(),那么这个函数的默认值将作为对象的创建数据。如果使用get(),那么默认值将被忽略。因此,当使用这个默认数据时,可以想象出,如果关键参数不是唯一的,则创建的对象可能是不正确的。如果使用唯一的关键参数,则可以在查询这个对象时使用相同的关键参数。在这种情况下,defaults参数将被忽略,并且get()get_or_create()将尝试获取一个对象。

接下来,通过两个实例来说明get_or_create()函数的使用方法:

例1:

from django.contrib.auth.models import User

# 查询一个用户是否存在,如果不存在则创建该用户并返回。
user, created = User.objects.get_or_create(username='exampleuser', defaults={
    'first_name': 'John',
    'last_name': 'Doe',
    'email': 'exampleuser@example.com',
})

在这个例子中,我们使用了get_or_create()方法查询特定用户名的用户是否存在。如果用户存在,则返回现有用户信息;否则,我们通过defaults参数来创建一个新的用户,并返回该用户的信息。

例2:

from django.forms.models import model_to_dict
from myapp.models import Person

def get_or_create_person(name, age, email):
    # 查询一个人是否存在,如果不存在则创建该人并返回。
    person, created = Person.objects.get_or_create(name=name, age=age, defaults={'email': email})
    return person

get_or_create_person(name='Tom', age=22, email='tom@example.com')

在这个例子中,我们使用了get_or_create()方法来查询是否存在指定名称、年龄和电子邮件地址的人。如果这个人存在,则返回现有人的信息;否则,我们通过使用defaults参数创建一个新的人,并返回该人的信息。此函数返回的是一个Person对象。

以上便是关于Django的get_or_create()函数作用与使用方法的完整攻略,希望能对您有所帮助。