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

2024-10-01 04:52:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个家长班:

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

还有一个孩子:

^{pr2}$

有没有可能在保存perent时创建子对象?在

子对象继承父对象的所有字段,但是,无论填充与否,每当保存父对象时,我都需要创建一个新的子对象。在

有什么想法吗?在


Tags: 对象modelmodels孩子classparentcharfieldfield2
2条回答

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

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

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

但我不知道是否允许。在

您可以使用信号,也可以重写父模型的保存方法。在

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

或者

^{pr2}$

在这两个选项中,如果只想在父对象已创建(而不是更新)时创建子级,则需要添加额外的登录名。对于signals,可以使用created参数,对于重写save方法,需要在调用super save method之前检查模型实例是否有id字段。在

相关问题 更多 >