在Django中同时保存对象及其相关对象

Ada*_*amY 6 python django django-models django-orm

在Django中,有没有办法创建一个对象,创建它的相关对象,然后一次保存它们?

例如,在下面的代码中:

from django.db import models


class Post(models.Model):
    title = models.CharField(max_length=255)
    body = models.CharField(max_length=255)


class Tag(models.Model):
    post = models.ForeignKey(Post)
    title = models.CharField(max_length=255)

post = Post(title='My Title', body='My Body')
post.tag_set = [Tag(post=post, title='test tag'), Tag(post=post, title='second test tag')]
post.save()
Run Code Online (Sandbox Code Playgroud)

我创建了一个Post对象.然后我还想创建并关联我的Tag对象.我想避免保存Post然后保存标签,因为如果post.save()成功,那么tag.save()失败,我留下了没有标签的帖子.

Django中是否有一种方法可以同时保存这些内容或者至少可以实现更好的数据完整性?

bru*_*ers 8

交易救援!

from django.db import transaction

with transaction.atomic():
   post = Post.objects.create('My Title', 'My Body')
   post.tag_set = [Tag(post, 'test tag'), Tag(post, 'second test tag')]
Run Code Online (Sandbox Code Playgroud)

作为旁注:我认为你真的想要PostTag... 之间的多对多关系......

  • 您需要保存标签或使用`Tag.objects.create(...)` (3认同)