繁体   English   中英

将父级和子级模型对象保存在一起

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM