Я новичок в Django и есть некоторые определения модели следующим образом:tranactions базы данных в Джанго для зависимых операций
class ProjectModel(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
class Meta:
db_table = "projects"
class StudyModel(models.Model):
project = models.ForeignKey(ProjectModel)
name = models.CharField(max_length=100)
description = models.TextField()
class Meta:
db_table = "studies"
У меня есть связанный с ним вид, что позволяет пользователю создать проект и исследование в то же время , Я делаю это следующим образом:
pid = ProjectModel.objects.filter(name__iexact=project_name).first()
if pid is None:
try:
#with transaction.atomic():
pobj = ProjectModel.objects.create(name="A", description="")
sobj = StudyModel.objects.create(name="B", description="", project_id=pobj.pk)
except:
#pobj.delete()
#sobj.delete()
return Response(status=status.HTTP_417_EXPECTATION_FAILED)
Я думал о том, как сделать это так, что если какие-либо из операций неудачно, база данных остается нетронутым то есть, если study
не создается по какой-то причине, project
не также создан.
В одном из способов я подумал, что это возможно отметить метод savepoints
перед вызовом objects.create
, а затем откат в обработчике исключений. Однако я не уверен, что это правильный способ сделать это.
ОК, поэтому, я думаю, мне не нужно беспокоиться о разворачивании ... Это давало ошибки раньше, но я понял, что это происходит из другого источника ... – Luca