避免在 Django 中创建重复对象
本文将解决 Django 中的 get_or_create()
方法。 一种用于避免查询集中出现冗余字段的方法。
在 Django 中使用 get_or_create() 方法
在 Django 中,我们有一种方法可以避免使用 get_or_create()
方法定义 get 或 create 代码。 当我们多次创建重复对象时,这种方法可以帮助我们避免多次创建它们。
try:
friend = Friend.objects.get(name='Harry jeams')
except DoesNotExist:
friend = Friend(name='Harry jeams')
friend.save()
在这个块中,当我们从查询集中得到一个朋友对象时,假设我们找不到这个对象,然后我们尝试创建这个对象。 如果我们要收到多个同时执行其他指令的请求,这看起来就像是一场比赛。
该过程可能会引发异常,因为查询集中不存在任何对象,因为已创建多个重复对象导致线程化。
我们有一种有效的方式来正确使用 get_or_create
方法,并且该方法通过一次操作即可快速响应。
friend,friend_to_friend = Friend.objects.get_or_create(name='Harry jeams')
get_or_create()
方法所做的第一件事是尝试使用 get() 方法获取一个对象。 不幸的是,如果第一次尝试获取对象失败,它将在我们的查询集中创建一个对象。
如果输出显示“IntegrityError”,它只会获取一个对象并返回它。 如果两个进程同时执行并获得处理和尝试创建对象的指令,则两者都将创建将成为我们查询集中的重复对象的对象。
由于这会创建重复项,因此我们需要模型字段中的唯一对象。
class Friend(models.Model):
friend_first_name = models.CharField(max_length=255)
friend_last_name = models.CharField(max_length=255)
friend, friend_to_friend = Friend.objects.get_or_create(first_name='Harry', last_name='jeams')
以下代码用于在查询集中获取和创建唯一对象。
代码示例:
class Friend(models.Model):
friend_first_name = models.CharField(max_length=255)
friend_last_name = models.CharField(max_length=255)
class SubClass:
unique = ('first_name', 'last_name')
friend, friend_to_friend = Author.objects.get_or_create(first_name='Harry', last_name='jeams')
Django 的 get_or_create()
函数返回两个变量。 第一个是对象,第二个是布尔变量。
有时我们只需要获取它返回的对象,所以我们使用这种语法。
句法:
friend, friend_to_friend = Friend.objects.get_or_create(name='Harry jeams', defaults={'list_of_friend': 0, 'place': 'college'})
如果我们的查询集中只有一个字段,我们可以使用 defaults__exact 代替 get_or_create()
方法中的默认参数。
相关文章
Django 中的 Slug
发布时间:2023/05/04 浏览次数:173 分类:Python
-
本篇文章旨在定义一个 slug 以及我们如何使用 slug 字段在 Python 中使用 Django 获得独特的帖子。
在 Django 中按降序过滤查询集中的项目
发布时间:2023/05/04 浏览次数:157 分类:Python
-
在这个讲解中,学习如何借助 Django 中的 order_by() 方法按降序过滤出查询集中的项目。
Django ALLOWED_HOSTS 介绍
发布时间:2023/05/04 浏览次数:181 分类:Python
-
本文展示了如何创建您的 Django 网站,为公开发布做好准备,如何设置 ALLOWED_HOSTS 以及如何在使用 Django 进行 Web 部署期间修复预期的主要问题。
Django 中的 Select_related 方法
发布时间:2023/05/04 浏览次数:129 分类:Python
-
本文介绍了什么是查询集,如何处理这些查询以及我们如何利用 select_related() 方法来过滤 Django 中相关模型的查询。
使用 Post 请求将数据发送到 Django 服务器
发布时间:2023/05/04 浏览次数:159 分类:Python
-
在这篇关于Django的讲解中,我们简要介绍了post和get请求以及如何在Django中用post实现CSRF token。
Django 返回 JSON
发布时间:2023/05/04 浏览次数:106 分类:Python
-
在与我们的讨论中,我们简要介绍了 JSON 格式,并讨论了如何借助 Django 中的 JsonResponse 类将数据返回为 JSON 格式。
在 Django 中创建对象
发布时间:2023/05/04 浏览次数:59 分类:Python
-
本文的目的是解释什么是模型以及如何使用 create() 方法创建对象,并了解如何在 Django 中使用 save() 方法。
在 Django 中为多项选择创建字段
发布时间:2023/05/04 浏览次数:75 分类:Python
-
在本文中,我们将着眼于为多项选择创建一个字段,并向您展示如何允许用户在 Django 中进行多项选择。