【发布时间】:2019-01-17 18:08:53
【问题描述】:
考虑下面的代码,其中我有一个父模型,所有子模型都通过ForeignKey 关系与父模型相关。每个孩子都可能有自己的孩子,使整个家庭看起来像一个树状结构。
class Parent(models.Model):
field = models.CharField(max_length=100, primary_key=True)
class Child_1(models.Model):
parent = models.ForeignKey(Parent, models.CASCADE, related_name='aa')
class Child_2(models.Model):
parent = models.ForeignKey(Parent, models.CASCADE, related_name='aa')
class Child_1_Child_1(models.Model):
parent = models.ForeignKey(Child_1, models.CASCADE, related_name='aa')
class Child_1_Child_2(models.Model):
parent = models.ForeignKey(Child_1, models.CASCADE, related_name='aa')
在为Parent 创建对象后,我想创建所有子对象。
我想我可以像这样创建所有子对象:
parent = Parent.objects.create(**kwargs)
child_1 = Child_1.objects.create(parent=parent)
child_2 = Child_2.objects.create(parent=parent)
child_1_child_1 = Child_1_Child_1.objects.create(parent=child_1)
child_1_child_2 = Child_1_Child_2.objects.create(parent=child_1)
...
但是你知道,这看起来不太好。有没有内置的 Django 方法来处理这种链式父子对象的创建?
【问题讨论】:
-
好吧,我个人想知道你为什么要首先构造所有这些对象。如果某些模型需要额外的列(没有默认值),那该怎么办?
-
@WillemVanOnsem 这用于数据管理系统。当用户单击父对象时,它将重定向到用户可以编辑该父对象的所有子字段的页面。最初所有子字段都是空白的,如果空白,用户可以填写字段,否则,用户可以更新字段值。但要做到这一点,子对象需要存在于数据库中,以便用户可以编辑这些子字段
标签: django django-models