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

  • Post category:Python

Django的get_or_create()函数可以根据指定的查询条件获取数据,如果不存在,则自动创建新的对象并返回。该函数的作用是,如果数据库中没有符合条件的对象,则创建一个新的对象;如果有符合条件的对象,则返回这个对象。以下是函数的使用方法和示例:

使用方法

get_or_create方法需要传入两个参数,第一个为查询参数,第二个为将要创建的模型实例参数。如果查询条件所匹配的对象存在,get_or_create方法将返回一个长度为2的元组,第一个元素为匹配到的对象,第二个元素标识对象是否存在,True表示对象存在,False表示对象不存在;如果没有匹配到对象,get_or_create方法将会创建并返回一个新的对象,第二个元素将会返回True。

get_or_create方法可以使用关键字参数,用于创建新对象的字段赋值。如果使用了关键字参数,并且没有找到符合条件的对象,则将根据关键字参数创建新的对象。

一个实例

假设有一个User模型,其中有两个字段:’name’和’email‘,如果我们要查询一个用户的数据并且如果用户不存在则创建以下规则的代码如下:

from .models import User

user, created = User.objects.get_or_create(name='Alice', email='alice@example.com')
if created:
    print('User created!')
else:
    print('User already exists!')

上述代码中,’name’和’email’字段是查询条件,如果数据库中已经有一个名为Alice且邮箱为alice@example.com的用户,则返回该用户,并将created设置为False;如果没有找到匹配数据,则创建一个新的用户并将created设置为True,表示该用户是新创建的。

另一个实例

如果我们有一个模型叫做Person,需要使用身份证号查询该模型,如果不存在则插入一个新的Person对象。代码如下:

from .models import Person

id_number = '110105199012114336'
person, created = Person.objects.get_or_create(id_number=id_number, defaults={
    'name': '张三',
    'age': 28,
    'gender': 'male'
})
if created:
    print('Person created!')
else:
    print('Person already exists!')

上述代码中,’id_number’字段是查询条件。如果数据库中已经有一个身份证号为110105199012114336的人,则返回该记录,并将created设置为False;如果没有找到匹配数据,则创建一个新的人记录并将人的姓名、年龄和性别设置为默认值,即创建一个张三,年龄为28,性别为男的记录并将created设置为True,表示该记录是新创建的。