【发布时间】:2021-04-26 14:32:57
【问题描述】:
我正在使用 Python(3.7) 和 Django(3) 开发一个项目,我必须在其中创建一些模型来存储报告。有 4 种不同的模型来表示每种类型的报告,只有 2 个公共字段(RequestId、InstCode),但其余字段不同。最后,我必须在主页上显示最近的 10 份报告(来自所有模型的混合)。
以下是我目前实现模型的方式:
来自models.py:
class DistributionReport(models.Model):
RequestId = models.CharField(max_length=256, blank=False, default=0)
InstCode = models.CharField(max_length=3, blank=False)
Currency = models.CharField(max_length=3, blank=False)
Denomination = models.IntegerField(blank=False, default=0)decimal_places=2)
date = models.DateField(default=datetime.date.today)
class Meta:
verbose_name = 'Distribution Report'
def __str__(self):
return self.RequestId
class ExpenditureReport(models.Model):
RequestId = models.CharField(max_length=256, blank=False, default=0)
InstCode = models.CharField(max_length=3, blank=False)
StaffExpenditure = models.DecimalField(max_digits=12, decimal_places=2)
Month = models.IntegerField(blank=False, default=0)
Quarter = models.IntegerField(blank=False, default=0)
Year = models.IntegerField(blank=False, default=0)
class Meta:
verbose_name = 'Expenditure Report'
def __str__(self):
return self.RequestId
class StorageReport(models.Model):
RequestId = models.CharField(max_length=256, blank=False, default=0)
InstCode = models.CharField(max_length=3, blank=False)
Currency = models.CharField(max_length=5, blank=False)
Denomination = models.IntegerField(blank=False, default=0)
date = models.DateField(default=datetime.date.today)
class Meta:
verbose_name = 'Processing Report'
def __str__(self):
return self.RequestId
class AssetsReport(models.Model):
RequestId = models.CharField(max_length=256, blank=False, default=0)
InstCode = models.CharField(max_length=3, blank=False)
AssetClassificationId = models.IntegerField(blank=False, default=0)
VaultCapacity = models.DecimalField(max_digits=10, decimal_places=2)
Year = models.IntegerField(blank=False, default=0)
HalfOftheYear = models.IntegerField(blank=False, default=0)
class Meta:
verbose_name = 'Assets Report'
def __str__(self):
return self.RequestId
构建这些模型的最佳方法是什么,以便我可以查询最近的报告(可以是任何类型)?
【问题讨论】:
-
我可以看到 2 种可能性:1)创建一个使用 generic foreign relations 到不同报表模型的基本报表类或 2)使用 django polymorphic 进行模型继承
标签: python python-3.x django django-models django-orm