关键词

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

Django中的update_or_create()函数可以用于更新或创建数据库中的记录。如果数据库中存在符合更新条件的记录,则更新该记录的值;反之,如果没有符合条件的记录,则新建一个记录。下面详细介绍update_or_create()函数的用法:

1. 函数格式

update_or_create()函数的格式如下:

update_or_create(defaults=None, **kwargs)
  • defaults:表示要更新的字段及其值所组成的字典;
  • kwargs:表示过滤记录的条件,它们的形式是键值对,例如name='Jack'age=23等等。

2. 使用方法

例如,下面是一个用户模型类:

class User(models.Model):
    name = models.CharField(max_length=30)
    age = models.IntegerField()

假设数据表中已经有一个名字为'Jack'的用户,现在要更新这个用户的年龄为33,可以使用下面的代码:

user, created = User.objects.update_or_create(name='Jack', defaults={'age': 33})

其中,user是更新或者创建的用户对象,created是一个布尔值,指示该对象是否是新创建的。如果用户存在,那么user是已有的用户对象;如果用户不存在,那么user是新创建的用户对象。这个代码与下面的代码是等价的:

user = User.objects.filter(name='Jack').first()
if user is None:
    user = User(name='Jack', age=33)
else:
    user.age = 33
    user.save()

再举一个例子:有一个书籍模型类Book,其字段如下:

class Book(models.Model):
    name = models.CharField(max_length=100)
    author = models.CharField(max_length=20)
    pub_date = models.DateField()

假设需要更新一本书的信息,如果这本书存在,则只需更新它的作者和出版日期;如果它不存在,则新建一本书,请使用下面的代码:

book, created = Book.objects.update_or_create(
    name='Python编程从入门到实践',
    defaults={'author': 'Eric Matthes', 'pub_date': datetime.date(year=2016, month=6, day=30)}
)

3. 注意事项

  • 使用update_or_create()函数时,kwargs中的过滤条件必须是唯一的,否则会抛出MultipleObjectsReturned或DoesNotExist异常;
  • 如果你使用update_or_create()函数更新了一个已有的记录,其中的defaults字段值会覆盖原来的字段值。

本文链接:http://task.lmcjl.com/news/16236.html

展开阅读全文