[英]Save parent and child model object together
我使用Django 2.0和mysql数据库,我的项目模型如下:
class Parent(models.Model):
name = models.CharField()
class Child(models.Model):
number = models.IntegerField()
parent = models.ForeignKey(Parent)
我想要的是同时将父对象和子对象同时保存在一起,这样如果在任何情况下子对象都有错误(如数字字段是“某些文本”)并且无法保存,则父对象不会保存。
在Flask(使用postgresql)中有add(object)和add_all([parent,child])方法,我使用了add_all,所以如果child有错误,parent就不会保存。
但在Django我找不到这种方法。
默认方法是:
parent = Parent(name = "my name")
parent.save()
child = Child(number=3, parent=parent)
child.save()
我想要的是这样的:
parent = Parent(name = "my name")
child = Child(number=3, parent=parent)
接着:
child.save(with related parent)
要么:
save(parent, child together)
PS:我读了这个链接,我认为“SET”方法是我需要的,但我不知道如何使用它,如果它是解决方案: django关系
我想要的是同时将父对象和子对象保存在一起,这样如果在任何情况下子对象都有错误[...]而无法保存,则父对象不会保存。
听起来像你可以使用数据库事务 。 在一个事务中,要么所有操作都要通过,要么所有操作都回滚,没有中途(没有子节点而没有父节点保存在你的情况下)
下面是使用transaction.atomic
的示例:
from django.db import DatabaseError, transaction
try:
with transaction.atomic():
parent = Parent(name = "my name")
parent.save()
child = Child(number=3, parent=parent)
child.save()
except DatabaseError:
# Handle the case where an error prevented the operation
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.