django模型中抽象类与多对多关键

时间:2015-07-25 10:48:28

标签: python django abstract-class

我正在考虑在django中创建类似QoS的东西。我的第一个想法是创建一个服务的抽象类,然后创建我的系统将提供的每个实际服务的具体类。然后,一个模型类将是容器QoSPlan,它对我所创建的每个具体类具有多对多关键,因此我可以创建不同的QoSPlans,我可以例如授予用户。

class Service(models.Model):
    name = models.CharField(max_length=30)
    description = models.TextField()

    class Meta:
        abstract = True

class DiskQoutaService(models.Model):
    max_size = models.PositiveIntegerField(verbose_name="Max size in Gb"

class AppsAllowed(models.Model):
    apps = models.CharField(max_length=100):

和QoSPlan

class QoSPlan(models.Model):
    services = models.ManyToManyField(Service)

django可以吗?有没有办法绕过这种行为。我知道它有所不同,但我看到这发生在java和jpa实体中,并想知道它是否可以在python中完成。还有另一种方式吗?

1 个答案:

答案 0 :(得分:0)

由于数据库中没有基础表的非常明显的原因,您不能在抽象模型上使用外键 - 请记住django的模型类正在映射到数据库表。

"继承"在关系数据库中可以用两种方式实现:带有视图的共享表(或者,在Django中,共享模型和代理模型),以及具有一对一关系的多个表(Django中的具体继承)。两种解决方案各有利弊:多表需要连接和/或联合,共享表意味着一个包含大量未使用字段的巨大表,以及子类之间可能存在的名称冲突。

注意:如果您选择多表格方案,您肯定会受益于django-polymorphic

如果你想参加