Python 仅当成功创建其他对象时创建对象
我对Django相当陌生,不熟悉任何框架/语言(不仅仅是python/Django)中针对这种情况的最佳实践 情况是,当用户第一次在我的站点上注册时,如果不存在组织,我想为他们创建一个组织,然后为他们创建一个引用该组织的用户。我从不希望插入一个而不插入另一个,但我需要首先创建组织,以便为每个用户保存组织UUID。现在,即使用户的创建有问题,组织仍然会被创建。这显然是一个问题,因为我有一个没有附加用户的组织 我不知道如何在创建组织之前检查是否正确创建了用户,但我需要做的似乎是这样的事情。在创建组织对象时使用commit=false似乎不起作用,因为我需要获取UUID。所以我不确定最好的方法 我正在覆盖流行身份验证包django allauth的序列化程序中的save方法 models.py 序列化程序.pyPython 仅当成功创建其他对象时创建对象,python,django,django-models,django-views,django-serializer,Python,Django,Django Models,Django Views,Django Serializer,我对Django相当陌生,不熟悉任何框架/语言(不仅仅是python/Django)中针对这种情况的最佳实践 情况是,当用户第一次在我的站点上注册时,如果不存在组织,我想为他们创建一个组织,然后为他们创建一个引用该组织的用户。我从不希望插入一个而不插入另一个,但我需要首先创建组织,以便为每个用户保存组织UUID。现在,即使用户的创建有问题,组织仍然会被创建。这显然是一个问题,因为我有一个没有附加用户的组织 我不知道如何在创建组织之前检查是否正确创建了用户,但我需要做的似乎是这样的事情。在创建组织
非常感谢您的指导 原子性是数据库事务的定义属性。atomic允许我们创建一个代码块,其中保证了数据库的原子性。如果代码块成功完成,更改将提交到数据库。如果出现异常,将回滚更改
from django.db import transaction
def viewfunc(request):
# This code executes in autocommit mode (Django's default).
do_stuff()
with transaction.atomic():
# This code executes inside a transaction.
do_more_stuff()
有关给定链接的更多详细信息。原子性是数据库事务的定义属性。atomic允许我们创建一个代码块,其中保证了数据库的原子性。如果代码块成功完成,更改将提交到数据库。如果出现异常,将回滚更改
from django.db import transaction
def viewfunc(request):
# This code executes in autocommit mode (Django's default).
do_stuff()
with transaction.atomic():
# This code executes inside a transaction.
do_more_stuff()
有关给定链接的更多详细信息
如果不存在,我想为他们创建一个组织
用于获取或创建组织
把所有这些都包在一个盒子里
从django.db导入事务
使用transaction.atomic:
组织,已创建=组织。对象。获取或创建**组织\u数据
尝试创建用户,如果失败,则引发异常。
这样,事务中创建的组织将回滚。
如果不存在,我想为他们创建一个组织
用于获取或创建组织
把所有这些都包在一个盒子里
从django.db导入事务
使用transaction.atomic:
组织,已创建=组织。对象。获取或创建**组织\u数据
尝试创建用户,如果失败,则引发异常。
这样,事务中创建的组织将回滚。
必须将信号添加到用户模型中。像这样:
@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_organization(sender, instance=None, created=False, **kwargs):
if created:
organization.objects.create(user=instance)
这是我的工作。当我需要创建一些对象时,用户创建了。创建用户实例后称为自动。必须将信号添加到用户模型中。像这样:
@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_organization(sender, instance=None, created=False, **kwargs):
if created:
organization.objects.create(user=instance)
这是我的工作。当我需要创建一些对象时,用户创建了。创建用户实例后称为自动。谢谢!在本例中,我不需要get_或create,因为我从不想更新或返回现有记录,但原子方法有帮助。谢谢!在本例中,我不需要get_或create,因为我从不想更新或返回现有记录,但原子方法有帮助。