0

我正在为数据库设置 django 模型,目前我的方法是将数据库表直接映射到模型。但是,在某些情况下,我实际上需要使用相对复杂的视图。一个特定情况是我有一个表(在报告中,而不是数据库中)需要显示来自相关数据库表的合并列表:

class Entity(Models):
    name = CharField()

class LargeEntity(Entity):
    size = FloatField()

class SmallEntity(Entity):
    type = ForeignKey(SmallEntityType)

报告(和表格)需要显示:

Entity name - entity.name
Large/Small - 'Large' if entity is LargeEntity else 'Small'
size/type   - entity.size if entity is LargeEntity else 'type'

这可以通过CASESQL 中的语句来完成,但是由于这种情况在我的数据中经常发生,我宁愿找到一个更简洁的解决方案。

更改报告格式不是选项,但如果有更好的实现方式,可以更改数据库。

4

1 回答 1

0

如果每个实体类型不包含很多属性,您可以创建一个模型,其中包含所有必填字段以及该模型中的一个或多个字段,以按类型或其他方式区分实体:

class Entity(Models):
    NORMAL, LARGE, SMALL = 0, 1, 2
    ETYPE = (
        (NORMAL, 'Normal'),
        (LARGE, 'Large'),
        (SMALL, 'Small'),
    )
    entity_type = IntegerField(choices=ETYPE,...)

    name = CharField()
    size = FloatField()
    smalltype = ForeignKey(SmallEntityType)
    ...
于 2013-02-18T10:15:23.623 回答