Python Django-Manytomy与抽象基的关系-不可能,但有更好的方法吗?

Python Django-Manytomy与抽象基的关系-不可能,但有更好的方法吗?,python,django,orm,Python,Django,Orm,鉴于以下模型: class BaseMachine(models.Model) fqdn = models.CharField(max_length=150) cpus = models.IntegerField() memory = models.IntegerField() class Meta: abstract = True class PhysicalMachine(BaseMachine) location = models

鉴于以下模型:

class BaseMachine(models.Model)
    fqdn = models.CharField(max_length=150)
    cpus = models.IntegerField()
    memory = models.IntegerField()

    class Meta:
        abstract = True

class PhysicalMachine(BaseMachine)
    location = models.CharField(max_length=150)


class VirtualMachine(BaseMachine)
    hypervisor = models.CharField(max_length=5)


class Sysadmin(models.Model):
    name = models.CharField(max_length=100)
    admin_of = models.ManyToManyField...
在本例中,我想将1个系统管理员与许多机器联系起来——无论是实例还是物理机器或虚拟机器。我知道我不能有一个抽象基的manytomy,但我想知道是否有更好的方法来实现这一点,而不仅仅是在sysadmin上为每个模型提供一个单独的manytomy字段?在这个小示例中,这是可以容忍的,但是如果您有2个以上的子类,或者如果您需要与“基类”相关的其他模型,那么它将变得更需要管理


谢谢:

您考虑过使用该框架吗

编辑:我已经更新了解决方案,因此一个管理员可以有多台机器,一台机器可以有多个管理员:

class Sysadmin(models.Model):
    name = models.CharField(max_length=100)


class BaseMachine(models.Model):
    fqdn = models.CharField(max_length=150)
    cpus = models.IntegerField()
    memory = models.IntegerField()
    admins = models.ManyToManyField(Sysadmin)

    class Meta:
        abstract = True

class PhysicalMachine(BaseMachine):
    location = models.CharField(max_length=150)


class VirtualMachine(BaseMachine):
    hypervisor = models.CharField(max_length=5)



In [1]: s1 = Sysadmin(name='mike')

In [2]: s1.save()

In [3]: m1 = PhysicalMachine(fqdn='test', cpus=1, memory=20, location='test')

In [4]: m1.save()

In [5]: m1.admins.add(s1)

In [6]: m1.save()

In [7]: m2 = VirtualMachine(fqdn='test', cpus=1, memory=20, hypervisor='test')

In [8]: m2.save()

In [9]: m2.admins.add(s1)

In [10]: m2.save()

In [11]: m1.admins.all()
Out[11]: [<Sysadmin: Sysadmin object>]

In [12]: m2.admins.all()
Out[12]: [<Sysadmin: Sysadmin object>]

但是我可以将许多*计算机附加到1个系统管理实例吗?使用ContentType,我必须为每台*机器创建多个系统管理员实例?我已经更新了解决方案,因此一个管理员可以有多台机器,一台机器可以有多个管理员。反转关系将适用于我的用例,谢谢各位。如果您发现我的答案有用,请使用绿色标记将其标记为正确。非常感谢。