我正在覆盖模型中的默认.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()
方法一起工作?
答案 0 :(得分:1)
如果希望两个数据库操作是原子操作,则应使用transaction.atomic()
。具体来说,如果Folder
创建失败,是否应该回滚save()
中应用的更改?如果答案是肯定的,请使用transaction.atomic
上的def save()
装饰器。