使用基本模型创建OneToOneField

时间:2012-09-25 05:27:34

标签: django django-models one-to-one

有时在时间模型变得太大了。需要将其拆分为多个模型并将其与OneToOneField连接。最常使用的字段,保存在主模型中,其他字段会移动到其他模型中。

然而,在创建新的模型实例时,这种方法会变得令人头疼。当您可以使用一行初始化一个模型时:

MyModel.objects.create(foo=1, bar=2)

您需要至少两行来初始化两个模型:

instance = MyModel.objects.create(foo=1, bar=2)
MyRelatedModel.objects.create(mymodel=instance, hello=3, world=4)

有没有办法简单地在一行中创建两个模型,或者我应该为这些问题编写自己的辅助函数?

1 个答案:

答案 0 :(得分:1)

我认为,由于以下原因,您不应该使用onetooneField拆分模型

  • 正如你所说,会有一些额外的代码来管理它们。
  • 每次查询它们时,您都必须进行两次查询,而不是两次。

请不要忘记django型号有两个功能。保持数据相关的方法,并保持您的应用程序的数据模型。一些商务模型具有包含数百个字段的表。这是完全正常的。如果你真的想分开它们。您可能想要查看抽象基类。这些是您的模型的基类,它没有自己的单独表格https://docs.djangoproject.com/en/dev/topics/db/models/#abstract-base-classes

但是如果你坚持使用oneToOne字段,你可以在一个模型的方法中包装对象创建代码,如

MyMode.create(attr_for_model_A=1, attr_for_model_B=2)

或者您可以覆盖默认管理器的create方法来创建两个方法而不是一个方法 https://docs.djangoproject.com/en/dev/topics/db/managers/#modifying-initial-manager-querysets

在我看来,非那些将值得拥有小型号代码。