Как связать существующего родителя с потомком в множественном наследовании django

У меня есть родительский объект со многими существующими записями:

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 ответа

Решение

Я нашел способ, которым вы можете сделать это, как:

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

Вы можете просмотреть полную тему здесь: https://code.djangoproject.com/ticket/7623

Вы не можете сделать это, потому что

наследование нескольких таблиц использует неявный OneToOneField, чтобы связать дочерний элемент и родительский элемент

Это означает, что существует взаимно-однозначное отношение между именованным объектом Entity и соответствующими подклассовыми моделями Investor. Django просто обрабатывает перевод из нескольких таблиц в одну модель, так что вы этого не замечаете.

Поэтому, когда вы создаете Инвестора, вы должны написать следующую строку

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

Который создаст строку таблицы Investor, связанную со строкой Entity с отношением один к одному. Таким образом, если вы хотите создать новый объект Investor с этой существующей записью Entity, то произойдет нарушение отношения один-к-одному в базе данных, и пока никакой другой синтаксис ассоциации в Django для множественного наследования. Для более подробной информации вы можете увидеть эту ссылку

Вы можете использовать существующую запись модели Entity, если ваш дизайн базы данных, как показано ниже:

class Investor(models.Model):
  entity = model.ForeignKey(Entity) // Many-to-One relationship
  investor_name = models.CharField(max_length=255)
Другие вопросы по тегам