我有一个带有几个子类型的 django 模型,直到现在我一直在明确处理这些子类型。每条记录由三个字段唯一标识:
class Entity:
type = CharField(max_length=3)
released_at = DateTimeField()
number = IntegerField()
我使用查询表达式将其组合成单个字符串以用于搜索和注释结果:
entity_uid_expr = Case(
When(
number=None,
then=Value(None),
),
default=Concat(
'type', ExtractYear('released_at'), 'number',
output_field=CharField()
),
output_field=CharField()
)
到目前为止,这已经很好地工作了,但是这两个子类型现在正在发生相当大的分歧,使用多态模型将它们作为子类处理会更容易。我想做的是这样的:
class Entity:
released_at = DateTimeField()
number = IntegerField()
class EntityA(Entity):
type = 'A'
class EntityB(Entity):
type = 'B'
但这会从数据库中删除类型信息并破坏查询表达式。
是否可以根据多态类设置字段的默认值?我能想到的唯一其他选择是将其隐藏起来,并在保存时使用正确的值自动填充它。
这是一种可行的方法还是我错过了什么?
谢谢!