django - Django - 如何从继承相同抽象类的许多模型中创建一个 TableView?
问题描述
我正在尝试创建一个 TableView 来显示我的项目中从同一个抽象类继承的所有对象。我知道我可能需要使原始类不抽象,但该项目已经在运行,我宁愿现在不更改模型。
抽象类是这样的:
class WarehouseBase(models.Model):
region = models.ForeignKey(Region, on_delete=models.PROTECT, null=True, blank=False, verbose_name='Región')
name = models.CharField(max_length=50, verbose_name='Nombre', unique=True)
class Meta:
abstract = True
从它继承的类是:
class SaleWarehouse(WarehouseBase):
TYPES = (
(0, 'Autotanque'),
(1, 'Estación de carburación')
)
type = models.IntegerField(choices=TYPES, null=False, blank=False, verbose_name='Tipo')
# price = models.ForeignKey(SpecificPrice, on_delete=models.SET_NULL, null=True, blank=True, related_name='warehouse')
lat = models.DecimalField(max_digits=9, decimal_places=6, null=True)
lng = models.DecimalField(max_digits=9, decimal_places=6, null=True)
price = models.FloatField(verbose_name='Precio', validators=[MinValueValidator(0.0), MaxValueValidator(1000.0)], null=True, blank=True)
price_date = models.DateField(verbose_name='Fecha de precio', null=True, blank=True, auto_now_add=True)
def __str__(self):
return '{} - {}'.format(str(self.pk), self.name)
class GeneralWarehouse(WarehouseBase):
@property
def total_capacity(self):
capacity = 0.0
for tank in self.tanks:
capacity += tank.max_capacity
return capacity
def __str__(self):
return "Almacén general '{}'".format(self.name)
刚刚添加了对包含所有仓库的视图的新要求,但是在制作项目时不需要这样做。我一直在搜索,并找到了更改数据库模型的方法,以便我可以创建 WarehouseBase 对象的查询集,但它需要在数据库中进行许多更改,这将是非常危险的,因为有几个功能依赖于这些模型。
有没有办法让 TableView 显示所有 SaleWarehouse 和 GeneralWarehouse 对象,而不更改模型?
解决方案
您可以创建对象列表或字典并从模型、SaleWarehouse 和 GeneralWarehouse 添加对象。这样,您可以将来自两个模型的数据合并到一个列表中,而无需对数据库进行任何更改。
推荐阅读
- postgresql - SoapUI:5.6.0 java.lang.ClassNotFoundException:使用 maven 运行测试时出现 PostgreSQL/org.postgresql.Driver
- reactjs - 如何在反应js中按下按钮时手动停止录制并开始上传视频而不使用Ziggeo选择封面帖子?
- javascript - 如何在反应应用程序中集成谷歌登录身份验证
- store - 创建新帐户后无法验证 Google 开发者帐户的 ID
- firebase - 删除后生成相同的文档ID
- apache-kafka - Kafka Streams 没有获取 max.poll.records 和其他配置
- react-table - React-table - 自定义排序,以便某个值始终位于末尾
- r - 使用 purr:map 过滤和变异嵌套的鸢尾花数据集
- javascript - 想要迭代数组但增加事件的计数
- azure-devops - 如何使用管道变量部署应用服务作为要下载的工件?