Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 仅当成功创建其他对象时创建对象_Python_Django_Django Models_Django Views_Django Serializer - Fatal编程技术网

Python 仅当成功创建其他对象时创建对象

Python 仅当成功创建其他对象时创建对象,python,django,django-models,django-views,django-serializer,Python,Django,Django Models,Django Views,Django Serializer,我对Django相当陌生,不熟悉任何框架/语言(不仅仅是python/Django)中针对这种情况的最佳实践 情况是,当用户第一次在我的站点上注册时,如果不存在组织,我想为他们创建一个组织,然后为他们创建一个引用该组织的用户。我从不希望插入一个而不插入另一个,但我需要首先创建组织,以便为每个用户保存组织UUID。现在,即使用户的创建有问题,组织仍然会被创建。这显然是一个问题,因为我有一个没有附加用户的组织 我不知道如何在创建组织之前检查是否正确创建了用户,但我需要做的似乎是这样的事情。在创建组织

我对Django相当陌生,不熟悉任何框架/语言(不仅仅是python/Django)中针对这种情况的最佳实践

情况是,当用户第一次在我的站点上注册时,如果不存在组织,我想为他们创建一个组织,然后为他们创建一个引用该组织的用户。我从不希望插入一个而不插入另一个,但我需要首先创建组织,以便为每个用户保存组织UUID。现在,即使用户的创建有问题,组织仍然会被创建。这显然是一个问题,因为我有一个没有附加用户的组织

我不知道如何在创建组织之前检查是否正确创建了用户,但我需要做的似乎是这样的事情。在创建组织对象时使用commit=false似乎不起作用,因为我需要获取UUID。所以我不确定最好的方法

我正在覆盖流行身份验证包django allauth的序列化程序中的save方法

models.py 序列化程序.py
非常感谢您的指导

原子性是数据库事务的定义属性。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,因为我从不想更新或返回现有记录,但原子方法有帮助。