如何在django多元继承中将现有父级与子级关联

时间:2017-08-03 21:17:50

标签: django django-inheritance

我有一个包含许多现有记录的现有父实体:

class Entity(models.Model):
    name = models.CharField('Name', max_length=64, db_index=True) 

我还有使用django多表继承扩展的子对象:

class Investor(Entity):
    investor_name = models.CharField(max_length=255)

我想创建可能是现有实体的新投资者对象。

如何与现有实体关联和创建投资者?

2 个答案:

答案 0 :(得分:1)

我找到了一种方法,你可以这样做:

child = Restaurant(place_ptr=place)
child.save_base(raw=True)

您可以在此处查看完整主题:https://code.djangoproject.com/ticket/7623

答案 1 :(得分:0)

你不能这样做,因为

  

多表继承使用隐式OneToOneField链接子项和父项

这意味着实体命名记录与相应的子类投资者模型之间存在一对一的关系。 Django只是处理从多个表到单个模型的翻译,所以你没有真正注意到它。

因此,当您创建投资者时,您必须编写以下行

Investor.objects.create(investor_name ='jone', name='entity name')

这将创建与具有一对一关系的实体行关联的投资者表行。因此,如果您要使用现有的实体记录创建新的投资者对象,则会发生数据库一对一关系违规,因此Django中没有任何其他关联语法用于多重继承。 有关详细信息,请参阅this link

如果您的数据库设计如下所示,您可以使用现有的实体模型记录:

class Investor(models.Model):
  entity = model.ForeignKey(Entity) // Many-to-One relationship
  investor_name = models.CharField(max_length=255)