Django的。具有有限字段集的代理模型

时间:2016-07-16 18:13:38

标签: python mysql django django-models

主要时刻 - 数据库方案不是从头开始设计的。它继承自遗留系统,必须保持原样,因为它也与一些外部系统共享。所以我们有点:

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()

我目前唯一的解决方案是创建一些非托管模型。但是代理模型对于这个目标看起来更好..或者不是吗?

1 个答案:

答案 0 :(得分:1)

根据docs,代理模型并不是您要找的东西

  

因此,一般规则是:

     

如果要镜像现有模型或数据库表,则不这样做   想要所有原始数据库表列,请使用Meta.managed = False。   该选项通常用于建模数据库视图和表   不受Django的控制。

     

如果你想改变   仅限Python的行为模型,但保留所有相同的字段   原来,使用Meta.proxy = True。这样就可以了   代理模型是原始存储结构的精确副本   保存数据时的模型。

最好的办法是在SQL中创建一个只列出所需字段的视图,然后使用非托管表连接到它。