gpt4 book ai didi

Django - 在创建父对象时创建所有外键对象

转载 作者:行者123 更新时间:2023-12-03 23:13:11 26 4
gpt4 key购买 nike

考虑下面的代码,其中我有一个父模型,以及与父模型相关的所有子模型 ForeignKey关系。每个 child 都可能有自己的 child ,让整个家庭看起来像一个树形结构。

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 方法可以在链中处理这种父子对象的创建?

最佳答案

覆盖 save() 模型方法为,

class Parent(models.Model):
field = models.CharField(max_length=100, primary_key=True)

def save(self, *args, **kwargs):
is_new = not self.pk
super().save(*args, **kwargs)
if is_new:
Child_1.objects.create(parent=self)
Child_2.objects.create(parent=self)



class Child_1(models.Model):
parent = models.ForeignKey(Parent, models.CASCADE, related_name='aa')

def save(self, *args, **kwargs):
is_new = not self.pk
super().save(*args, **kwargs)
if is_new:
Child_1_Child_1.objects.create(parent=self)



class Child_2(models.Model):
parent = models.ForeignKey(Parent, models.CASCADE, related_name='aa')

def save(self, *args, **kwargs):
is_new = not self.pk
super().save(*args, **kwargs)
if is_new:
Child_1_Child_2.objects.create(parent=self)



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')

关于Django - 在创建父对象时创建所有外键对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51781201/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com