Джанго устанавливает один в один на унаследованной таблице
Мои модели выглядят так:
class Startup(Model):
unique_name = TextField("Lowercase Name", null=True, unique=True)
top_level_domain = TextField("Top Level Domain", null=True, unique=True)
main_company_name = TextField("Company Name", null=True)
main_short_description = TextField("Short Description", null=True)
main_homepage = URLField("Company Homepage", null=True, max_length=500)
а также
class Batch8(models.Model):
# primary contact person
first_name = models.TextField()
last_name = models.TextField()
role = models.TextField()
# more fields here
Я не хотел менять существующую базу данных, поэтому я создал модель подключения:
class Batch8Startup(Startup):
startup = models.OneToOneField(
Startup,
on_delete=models.CASCADE,
parent_link=True,
related_name='batch8_startup'
)
batch8 = models.OneToOneField(Batch8,
on_delete=models.CASCADE)
(Я тоже пробовал без related_name
и явный OneToOneField
за Startup
,
Затем я попытался заполнить эту таблицу:
applications = Batch8.objects.all()
for app in applications:
app_tld = self.get_top_level_domain(app.homepage)
new_startup = Startup(top_level_domain=app_tld, main_company_name=app.company_name, main_homepage=app.homepage)
new_startup.save()
Batch8Startup.objects.create(startup_id=new_startup.id, batch8_id=app_id)
так же как
batch8p = Batch8Startup(startup=new_startup, batch8_id=app_id)
batch8p.save()
которые эквивалентны, насколько я знаю.
Затем в базе данных запуска создаются записи, которые немедленно перезаписываются на null
путем создания объекта Batch8Startup. Это ожидаемое поведение? Если да, то почему и как правильно установить эту таблицу?