Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建三方多人关系django_Django_Database Design_Django Admin - Fatal编程技术网

如何创建三方多人关系django

如何创建三方多人关系django,django,database-design,django-admin,Django,Database Design,Django Admin,需要在django admin中建模服务器、应用程序和服务器角色之间的关系 服务器可以有一个或多个应用程序 应用程序可以托管在一台或多台服务器上 服务器具有应用程序的一个或多个角色(DB服务器角色, WEB服务器角色等) i、 e:ServerA拥有AppX的角色(Web服务器和Db服务器,2个角色) 服务器A具有应用程序的角色(Web服务器) ServerRole下面的代码是中介模型 以下是我的想法。到目前为止效果很好,但我是否遗漏了什么 class Application(model

需要在django admin中建模服务器、应用程序和服务器角色之间的关系

  • 服务器可以有一个或多个应用程序
  • 应用程序可以托管在一台或多台服务器上
  • 服务器具有应用程序的一个或多个角色(DB服务器角色, WEB服务器角色等)
    • i、 e:ServerA拥有AppX的角色(Web服务器和Db服务器,2个角色)
    • 服务器A具有应用程序的角色(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')

如果我正确理解了您的需求,这更像是您需要的

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')

一个服务器可以有很多应用程序,一个应用程序可以有很多服务器。如果某个应用程序位于特定的服务器上,它应该只有一个角色(如果不是您的整个系统,因为它更复杂、更难编写),可以通过多对多关系的直通模型来实现。

尝试理解您的代码和我的代码之间的差异。你的第二句话是:如果一个应用程序在一个特定的服务器上,它应该只有一个角色。事实并非如此。一台服务器可以为一个特定应用程序提供多个角色。例子。对于一个特定的应用程序,服务器A可能具有web服务器+代理服务器的角色。同一个服务器A可能具有应用程序B的代理服务器角色。这就是为什么我认为我的代码工作正常。但也许我错了。想法?是的,这也是我的意思。如果chess应用程序位于服务器A上,则它应该是代理。但是你不能在服务器A上有另一个chess应用程序实例,服务器A充当redis缓存。作为旁白,与你的项目无关。要成为数据库的服务器只能是数据库。其他端口不应向其开放。此外,DB的硬件配置与web服务器、memcache或redis非常不同。所以,他们真的不应该在高流量环境下试图成为各行各业的高手。同意你的例子。我将尝试您的代码,看看它与我之前的代码有什么不同(如上面的示例所示)。关于你的第二点。我同意你的看法。更像是,一台服务器对于一个appA既是FTP又是WEB,对于AppB则是唯一的WEB。我很想知道你的代码和我的代码有什么不同。你有作为中介的服务器模型,我有作为中介的角色。我还缺少什么吗?唯一的另一件事是尝试使用SFTP而不是FTP