我有一个拥有 20 年销售历史的房地产应用程序。我想将最近 2 年的列表放入一个将被主动查询的模型中,将另外 18 年的列表放入一个存档模型中。
我正在使用 Django 1.11 和 Postgresql 9.5
我有限的数据库管理知识告诉我这称为“水平分区”或“分片”。有没有一种聪明的方法可以在 Django 中进行设置?或者我是否只需将相同的字段名称复制并粘贴到 ListingActive
和 ListingArchive
中?
class ListingActive(models.Model):
data1 = models.IntegerField()
data2 = models.CharField(max_length=10)
...
data100 = models.CharField(max_length=20)
class ListingArchived(models.Model):
same fields as ListingActive
后续问题。我想执行水平分区和垂直分区。
假设每个Listing
模型中总共有100个字段,但只有其中10个被主动查询。其他90个字段是显示详细信息,从不查询。
最后,我想要总共 4 个模型,如下所示。有没有办法使用抽象模型或其他方法来设置它?
class ListingActiveQuery(models.Model):
actively_queried_data_1 = models.IntegerField()
actively_queried_data_2 = models.IntegerField()
...
actively_queried_data_10 = models.IntegerField()
details = models.OneToOneField(ListingActiveDetails)
class ListingActiveDetails(models.Model):
data_1 = models.IntegerField()
data_2 = models.IntegerField()
...
data_90 = models.IntegerField()
class ListingArchivedQuery(models.Model):
actively_queried_data_1 = models.IntegerField()
actively_queried_data_2 = models.IntegerField()
...
actively_queried_data_10 = models.IntegerField()
details = models.OneToOneField(ListingArchivedDetails)
class ListingArchivedDetails(models.Model):
data_1 = models.IntegerField()
data_2 = models.IntegerField()
...
data_90 = models.IntegerField()
最佳答案
通常您会创建一个 abstract model [Django-doc]与字段,然后将该抽象模型子类化为两个真实模型。例如:
class <b>AbstractDataModel</b>(models.Model):
data1 = models.IntegerField()
data2 = models.CharField(max_length=10)
# ...
data100 = models.CharField(max_length=20)
class Meta:
<b>abstract = True</b>
class ListingActive(<b>AbstractDataModel</b>):
pass
class ListingArchived(<b>AbstractDataModel</b>):
pass
编辑
class AbstractQuery(models.Model):
actively_queried_data_1 = models.IntegerField()
actively_queried_data_2 = models.IntegerField()
# ...
actively_queried_data_10 = models.IntegerField()
class Meta:
abstract = True
class AbstractDetails(models.Model):
data_1 = models.IntegerField()
data_2 = models.IntegerField()
# ...
data_90 = models.IntegerField()
class Meta:
abstract = True
class ListingActiveQuery(AbstractQuery):
details = models.OneToOneField(ListingActiveDetails)
class ListingActiveDetails(AbstractDetails):
pass
class ListingArchivedQuery(AbstractQuery):
details = models.OneToOneField(ListingArchivedDetails)
class ListingArchivedDetails(AbstractDetails):
pass
关于Django - 如何设置两个具有相同字段的模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53134418/