【问题标题】:How can I create multiple polymorphic Django models using the same table如何使用同一个表创建多个多态 Django 模型
【发布时间】:2020-06-23 01:59:51
【问题描述】:

我有一个基本 Django 模型 Rolls,映射到表 rolls。有多种类型的卷,由名为type 的列控制。在较旧的代码库中,我正在编写一个 v2(曾经是 PHP),我为每种类型创建了子类,控制设置它们自己的 type 值,并且效果很好。我不知道如何在 Django 中进行设置。

我希望它们都使用同一个表,并且每个都将从基本模型派生方法,但其中许多方法具有不同的实现。我想我可以写一个管理器来处理取回正确的值,但我不知道如何设置模型。

我尝试设置一个基本模型,然后从中派生出其他模型,但这些模型为每个模型创建了不同的表。考虑到子类不代表它们自己的表,使用 managed = False 似乎是错误的方法。

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    你在正确的轨道上,但我相信你想要proxy models 而不是不受管理的,例如proxy = True:

    然而,有时,您只想更改模型的 Python 行为 - 可能是更改默认管理器,或添加新方法。

    这就是代理模型继承的用途:为原始模型创建代理。您可以创建、删除和更新代理模型的实例,所有数据都将被保存,就像您使用原始(非代理)模型一样。不同之处在于您可以更改默认模型排序或代理中的默认管理器等内容,而无需更改原始内容。

    然后您可以覆盖每个子类的save 方法以设置正确的type,并覆盖每个子类的默认查询管理器以过滤该type

    【讨论】:

    • 谢谢,这正是我所需要的!
    • 是的,对不起,我今晚会测试它,如果它按预期工作,我一定会的!
    • @Rohit 进展如何? :)
    • 结果不是真正的多态,这里描述了一个问题:stackoverflow.com/questions/2218867/…
    猜你喜欢
    • 2020-02-22
    • 2017-05-07
    • 1970-01-01
    • 2014-06-21
    • 2021-12-19
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 2017-06-01
    相关资源
    最近更新 更多