如何创建3路ManyToMany关系django

时间:2016-11-13 16:23:16

标签: django database-design django-admin

需要在django admin。

中建模服务器,应用程序和服务器角色之间的关系
  • 服务器可以包含一个多个应用程序
  • 应用程序可托管在一个多个服务器上
  • 服务器具有一个或多个应用程序角色(数据库服务器角色, WEB服务器角色等)
    • 即:ServerA具有AppX
    • 的角色(Web服务器和Db服务器,2个角色)
    • 服务器A具有AppY(Web服务器)的角色

ServerRole下面的代码是中间模型

这就是我的想法。它到目前为止工作正常,但我错过了什么?

class Application(models.Model):
    name = models.CharField(max_length=200)

    def __unicode__(self):
        return self.name

class Server(models.Model):
    name = models.CharField(max_length=200)
    apps = models.ManyToMany('Application', related_name='servers')

class ServerRole(models.Model):
    name = models.CharField(max_length=200)
    servers = models.ManyToMany(Server, related_name='serverrole')

1 个答案:

答案 0 :(得分:1)

如果我已正确理解您的要求,那就更像您需要的

class ServerRole(models.Model):
    name = models.CharField(max_length=200)

class Application(models.Model):
    name = models.CharField(max_length=200)

    def __unicode__(self):
        return self.name

class Server(models.Model):
    name = models.CharField(max_length=200)
    apps = models.ManyToMany('Application', through='ServerRole', related_name='servers')

Rational - 服务器可以拥有许多应用程序,而应用程序可以拥有许多服务器。如果一个应用程序在特定的服务器上,它应该只有一个角色(如果不是你的整个系统因为非常复杂和难以编写),这可以由多对多关系中的直通模型实现。