Django在继承表上设置为一对一

时间:2018-04-18 15:17:07

标签: django django-models django-related-manager django-inheritance

我的模特看起来像这样:

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()

这相当于我所知。

然后在数据库中创建条目,通过创建Batch8Startup对象创建并立即覆盖到null。 这是预期的行为吗?如果是这样,为什么以及如何正确设置此表?

0 个答案:

没有答案