小编Dod*_*die的帖子

Django中的多态模型继承

这个问题是关于Django中的模型继承.

几乎所有我读过的内容(包括Django文档本身)都强烈建议使用"抽象基类"继承而不是"多表"继承.我同意推理,因此完全支持这项建议.但是,Django似乎没有支持:

  • 多态查询,或
  • 模型链接(即我不能从另一个模型创建一个ForeignKey字段到抽象基类).

情况

例如,我有一些实现'抽象基类'继承模式的模型:

class Tool(models.Model):
    name = models.CharField(max_length=30)
    group = models.ManyToManyField(ToolGroup, blank=True) # Link to 'ToolGroup' MUST be placed on abstract class
    attributes = models.ManyToManyField(ToolAttributeValue, blank=True)  # Link to 'ToolAttributeValue' MUST be placed on abstract class

    class Meta:
        abstract = True # Almost everything I read strongly recommends against making this its own table


class HandheldTool(Tool):
    electrical_safe = models.BooleanField(default=False)


class PowerTool(Tool):
    compliance_expiry_date = models.DateTimeField()


class ConsumableTool(Tool):
    combustible = models.BooleanField(default=False)
    best_before = models.DateTimeField(null=True)
Run Code Online (Sandbox Code Playgroud)

我还有一些与工具相关的分组和信息类: …

python django inheritance sqlalchemy django-models

5
推荐指数
1
解决办法
2439
查看次数

标签 统计

django ×1

django-models ×1

inheritance ×1

python ×1

sqlalchemy ×1