我有一个家长班:
class Parent(models.Model):
field1 = model.CharField()
field2 = model.CharField()
还有一个孩子:
class Child1(Parent):
pass
每当保存一个perent时,是否可以创建子对象?
子级继承父级的所有字段,但是无论是否填充,只要保存了父级,我都需要创建一个新的子级对象。
有什么想法吗?
答案 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不想对其进行迁移。
但是我不知道是否允许。