我正在考虑在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中完成。还有另一种方式吗?
答案 0 :(得分:0)
由于数据库中没有基础表的非常明显的原因,您不能在抽象模型上使用外键 - 请记住django的模型类正在映射到数据库表。
"继承"在关系数据库中可以用两种方式实现:带有视图的共享表(或者,在Django中,共享模型和代理模型),以及具有一对一关系的多个表(Django中的具体继承)。两种解决方案各有利弊:多表需要连接和/或联合,共享表意味着一个包含大量未使用字段的巨大表,以及子类之间可能存在的名称冲突。
注意:如果您选择多表格方案,您肯定会受益于django-polymorphic
如果你想参加