我正在进行一个使用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
构造这些模型的最佳方法是什么,这样我就可以查询最近的报告(可以是任何类型的)
看看规范化是如何工作的,因为所有模型都有两个公共字段,假设您有一个名为Report的表,它有两个字段
RequestId
和InstCode
。现在,您的所有其他模型都可以说处于XYZReport is a Report
种关系中。您可以使用OneTONE字段实现这一点,如下所示:
现在,无论何时生成任何类型报告的对象,都要生成
Report
的对象,并将其分配给模型的报告属性。保存这两个模型,还要确定报表实例是哪种报表,请将相关报表类型添加到报表实例,如下所示:要确定报表实例是否属于特定类型,请执行以下操作:
要获取特定类型对象,请使用OneToOne字段中设置的相关名称:
相关问题 更多 >
编程相关推荐