主要时刻 - 数据库方案不是从头开始设计的。它继承自遗留系统,必须保持原样,因为它也与一些外部系统共享。所以我们有点:
class A(models.Model):
"""
List of 110 fields
"""
field_1 = models.CharField()
field_... = models.CharField()
field_n = models.CharField()
有没有办法拥有模型B,它将是代理模型并且将具有有限的字段集?
喜欢:
class B(A):
class Meta:
proxy = True
field_3 = models.CharField()
field_5 = models.CharField()
field_10 = models.CharField()
我目前唯一的解决方案是创建一些非托管模型。但是代理模型对于这个目标看起来更好..或者不是吗?
答案 0 :(得分:1)
根据docs,代理模型并不是您要找的东西
因此,一般规则是:
如果要镜像现有模型或数据库表,则不这样做 想要所有原始数据库表列,请使用Meta.managed = False。 该选项通常用于建模数据库视图和表 不受Django的控制。
如果你想改变 仅限Python的行为模型,但保留所有相同的字段 原来,使用Meta.proxy = True。这样就可以了 代理模型是原始存储结构的精确副本 保存数据时的模型。
最好的办法是在SQL中创建一个只列出所需字段的视图,然后使用非托管表连接到它。