在覆盖Django模型中的save()方法时使用Transaction.atomic吗?

时间:2018-11-02 08:34:39

标签: python django

我正在覆盖模型中的默认.save()方法,并在其中创建一个相关的模型实例:

def save(self, *args, **kwargs):
    super().save(*args, **kwargs)
    parent_folder = None
    if self.parent:
        parent_folder = self.parent.task_folders.all().first()

    folder, created = Folder.objects.get_or_create(
        project=self.project,
        task=self,
        parent=parent_folder,
        defaults={'name': self.name,
                  'project': self.project,
                  'task': self,
                  'creator': self.creator,
                  'parent': parent_folder,
                  'is_root': True
                  })

问题是-我应该在这里使用transaction.atomic吗?它如何与.save()方法一起工作?

1 个答案:

答案 0 :(得分:1)

如果希望两个数据库操作是原子操作,则应使用transaction.atomic()。具体来说,如果Folder创建失败,是否应该回滚save()中应用的更改?如果答案是肯定的,请使用transaction.atomic上的def save()装饰器。