我有一个模型,用户,我需要在保存用户后直接在数据库中创建模型的另一个实例Client。 要做到这一点,我正在使用接收器,如下所示:·
@receiver(models.signals.post_save, sender=User)
def create_oauth_client(sender, **kwargs):
if kwargs['created']:
Client.objects.create(user=kwargs['instance'], name="Customer OAuth Client", client_type=1)
这适用于正常情况,但如果由于某种原因未保存客户端实例,我需要能够回滚创建 客户。有没有一种首选的方法呢?
答案 0 :(得分:1)
通过回滚整个交易。直接来自文档:
a.save() # Succeeds, but may be undone by transaction rollback
try:
b.save() # Could throw exception
except IntegrityError:
transaction.rollback()
c.save() # Succeeds, but a.save() may have been undone
换句话说,如果b.save()失败,在你的情况下,保存客户端,回滚整个事情,包括a.save(),在你的情况下用户保存。