Как связать существующего родителя с потомком в множественном наследовании 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)