Django同型号多表

Django同型号多表,django,django-queryset,multiple-tables,Django,Django Queryset,Multiple Tables,我有一张巨大的桌子,需要切成一些较小的桌子,例如: 活动01,活动02。。。 在为同一模型使用不同表名的django queryset时,我只知道在模型上设置表名: 模型。_meta.db_table='tableXXX' 但是,这种方法不适用于单个shell/request。(只适用于第一次,但不适用于下一次)->可能是因为它仍在同一实例上? 第二次尝试设置_meta.db_table='tableYYY'后,将出现一个错误“django.db.utils.ProgrammingError:表

我有一张巨大的桌子,需要切成一些较小的桌子,例如: 活动01,活动02。。。 在为同一模型使用不同表名的django queryset时,我只知道在模型上设置表名: 模型。_meta.db_table='tableXXX'

但是,这种方法不适用于单个shell/request。(只适用于第一次,但不适用于下一次)->可能是因为它仍在同一实例上? 第二次尝试设置_meta.db_table='tableYYY'后,将出现一个错误“django.db.utils.ProgrammingError:表“tableXXX”的子句条目中缺少”

我也尝试了一些我读过的关于这个问题答案的建议,比如:

class ListingManager(models.Manager):
    def get_custom_obj(self, table_name):
        self.model._meta.db_table = table_name
        return self

class ObjectName(models.Model):
    objects = ListingManager()
尝试创建一个对象管理器来获取新对象,但它不起作用,它仍然会抛出与以前相同的错误(在第二次设置_meta.db_table时)

如果我们想为_meta.db_table设置多次,唯一可行的方法是首先退出()shell,然后重新进入shell模式(这意味着for循环不起作用)


我知道它可以通过原始查询“Insert into tableXXX values()”来实现,但是有什么方法可以使用django queryset来实现吗?谢谢~

考虑创建一个包装器模型

class Model1(models.Model):
    # fields...
    name = ...
    age = ...
class Model2(models.Model):
    # fields...
    height = ...
    weight = ...
class ModelAll(models.Model):
    model1 = models.OneToOneField(Model1)
    model2 = models.OneToOneField(Model2)
但如果您只是为了组织而这样做,只需将字段用空格分隔开即可

这将导致以下表格:

模型1

 id | name  | age
------------------
  1 | "Joe" | 21
模型2

 id | height | weight
----------------------
  1 |  5.85  |  175
  2 |  6.0   |  210
模特儿

 id | model1_id | model2_id
----------------------------
  1 |     1     |      2
要访问子模型字段,请执行以下操作:

modelall = ModelAll.objects.get(...)
modelall_name = modelall.model1.name
modelall_height = modelall.model2.height

为什么需要拆分模型?如果是为了组织,只需将字段分成块,并用空格将它们分开。在这种情况下,ModelAll仍然非常庞大。我需要拆分表的原因是为了减少表的数量,因为如果将表放在一起,它将是非常巨大的数量。将表拆分为一些小表时,备份和表迁移可能非常容易。ModelAll实际上非常小。Model1和Model2将包含与其节对应的列。因此,如果Model1有name和age,Model2有height和weight作为字段,那么每个字段都将是一个只包含这些列的表。ModelAll将仅包含2个字段。。。一个整数是Model1的外键,一个整数是Model2的外键。它不会包含每个模型中的单个字段。我试图拆分的是,这些小表的每个字段都完全相同,例如:AllTable有字段“id,name,age,category”,然后我想将其拆分为SmallTableCategory1,其字段是“id,name,age”,然后是SmallTableCategory2,其字段是“id,name,age”。在这种情况下,这些smalltablecategoryX将比AllTable小得多。这就是它的作用。因此,将ModelAll替换为Person,将Model1替换为Category_Common,将Model2替换为Category_Size。Person由多个字段类别组成。每个子模型(在本例中为Model1和Model2)都包含字段组,但ModelAll将它们全部拉到一起。