Джанго устанавливает один в один на унаследованной таблице

Мои модели выглядят так:

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. Это ожидаемое поведение? Если да, то почему и как правильно установить эту таблицу?

0 ответов

Другие вопросы по тегам