3

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

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)

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

我如何将投资者与现有实体关联并创建投资者?

4

2 回答 2

6

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

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

你可以在这里查看完整的线程: https ://code.djangoproject.com/ticket/7623

于 2017-08-03T22:41:32.933 回答
0

你不能这样做,因为

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

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

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

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

这将创建一个与具有一对一关系的实体行关联的投资者表行。因此,如果您想使用该现有实体记录创建一个新的Investor对象,则会发生数据库一对一关系违规,并且到目前为止 Django 中没有任何其他关联语法用于多继承。有关更多详细信息,您可以查看此链接

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

class Investor(models.Model):
  entity = model.ForeignKey(Entity) // Many-to-One relationship
  investor_name = models.CharField(max_length=255)
于 2017-08-03T21:59:01.277 回答