自动从父对象创建子对象-Django 1.11

时间:2019-03-11 22:23:47

标签: python django

我有一个家长班:

class Parent(models.Model):
     field1 = model.CharField()
     field2 = model.CharField()

还有一个孩子:

class Child1(Parent):
    pass

每当保存一个perent时,是否可以创建子对象?

子级继承父级的所有字段,但是无论是否填充,只要保存了父级,我都需要创建一个新的子级对象。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可以使用信号,也可以覆盖父级模型的保存方法。

@receiver(models.signals.post_save, sender=Parent)
def post_parent_save(sender, instance, created, *args, **kwargs):
    # Create child here

或者,

class Parent(models.Model):
    def save(self, *args, **kwargs):
        super(Parent, self).save(*args, **kwargs)
        # Create child here

在这两个选项中,如果只想在创建(而不是更新)父级时创建子级,则需要添加额外的登录信息。对于信号,可以使用创建的参数,对于覆盖保存方法,需要在调用超级保存方法之前检查模型实例是否具有id字段。

答案 1 :(得分:1)

我想知道这样的事情是否对您有用:

class Child1(Parent):
    class Meta:
        db_table = 'whateverappparentisin_parent'
        managed = False

我不确定Django将如何处理此问题,但想法是您得到的模型具有完全相同的字段,并由相同的数据库表支持(因此,例如Parent上的其他所有删除操作也将立即“可见” ”(在Child1上),而Django不想对其进行迁移。

但是我不知道是否允许。