Django:如何创建一个包含另一个模型的所有字段(但与它无关)的新模型?

Posted

技术标签:

【中文标题】Django:如何创建一个包含另一个模型的所有字段(但与它无关)的新模型?【英文标题】:Django: How do I create a new model containing all the fields of another model (but unrelated to it)? 【发布时间】:2012-03-10 17:48:44 【问题描述】:

给定一个现有的 Django 模型:

class MyModel(models.Model):
    field1 = ...
    field2 = ...
    ...
    fieldN = ...

我想创建一个完全独立的模型,如下所示:

class MyModel2(models.Model):
    field1 = ...
    field2 = ...
    ...
    fieldN = ...

    fieldA = ...
    fieldB = ...
    ...
    fieldZ = ...

多表继承对我不起作用,因为我希望 MyModel2 由包含其所有字段的数据库表支持,而不仅仅是额外的字段以及指向 MyModel 表的链接。

如果我可以更改 MyModel 的定义,那么定义抽象基类可能会起作用。但是还有其他方法吗,可能使用 Python type 元类?

【问题讨论】:

我会使用抽象基类。元类魔法太聪明了。 docs.djangoproject.com/en/1.3/topics/db/models/… 看看这个 【参考方案1】:

为什么不是两者的抽象基类,而您的具体类之一没有其他字段?

【讨论】:

因为一般情况下我可能无法更改 MyModel 的定义。所以本质上我正在寻找一个函数,给定原始未更改的 MyModel,返回 MyModel2。 @jl6:我建议您阅读有关 Django 模型的信息,然后尝试使用它们,并尝试实现它,然后再提出您的任何具体问题。检查模型的 _meta 属性 - 里面有很多东西。

以上是关于Django:如何创建一个包含另一个模型的所有字段(但与它无关)的新模型?的主要内容,如果未能解决你的问题,请参考以下文章

创建一个新模型,其中包含当前现有模型的所有字段

Django 模型字段默认基于同一模型中的另一个字段

尝试使用 django 过滤器为给定模型中的所有字段创建一般搜索

如何在具有 Jsonfield 的模型中发布 django rest 中的数据

如何根据具有外键关系的另一个模型更新 Django 模型的字段

Django:扩展用户模型避免数据库连接