【问题标题】:Django. Proxy model with limited set of fields姜戈。具有有限字段集的代理模型
【发布时间】:2016-11-19 17:29:48
【问题描述】:

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

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

我目前想到的唯一解决方案 - 创建一些非托管模型。但是代理模型看起来更适合这个目标......还是不?

【问题讨论】:

    标签: python mysql django django-models


    【解决方案1】:

    根据docs,代理模型不是你要找的

    所以,一般规则是:

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

    如果你想改变 模型的纯 Python 行为,但保留与 原来,使用 Meta.proxy=True。这设置了一些东西,以便 代理模型是原始存储结构的精确副本 保存数据时的模型。

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

    【讨论】:

    • 是的,这就是我完成的解决方案。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    • 2016-01-18
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    相关资源
    最近更新 更多