0

有时随着时间的推移模型变得太大。希望将其拆分为多个模型并将它们与OneToOneField. 最常使用的字段保留在主模型中,其他字段移动到其他模型中。

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

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

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

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

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

4

1 回答 1

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)

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

在我看来,这些都不值得拥有小的模型代码。

于 2012-09-25T05:47:44.870 回答