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

Nik*_*nyh 4 python mysql django django-models

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

class A(models.Model): 
    """
    List of 110 fields
    """
    field_1 = models.CharField()
    field_... = models.CharField()
    field_n = models.CharField()
Run Code Online (Sandbox Code Playgroud)

有什么办法可以拥有模型 B,它将是代理模型并且具有有限的字段集?

喜欢:

class B(A):
    class Meta: 
        proxy = True
    field_3 = models.CharField()
    field_5 = models.CharField()
    field_10 = models.CharField()
Run Code Online (Sandbox Code Playgroud)

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

e4c*_*4c5 5

根据文档,代理模型不是您正在寻找的

\n\n
\n

所以,一般规则是:

\n\n

如果您正在镜像现有模型或数据库表,并且不\xe2\x80\x99t\n 想要所有原始数据库表列,请使用 Meta.management=False。\n 该选项通常对于建模数据库视图和表很有用\n不受 Django 的控制。

\n\n

如果您想要更改模型的仅 Python 行为,但保留与原始模型中的所有相同字段,请使用 Meta.proxy=True。这样的设置使得代理模型在保存数据时是原始模型存储结构的精确副本。

\n
\n\n

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

\n