2016-11-13 5 views
1

django adminでは、サーバ、アプリケーション、サーバロールの関係をモデル化する必要があります。3ウェイを作成する方法ManyToMany django

  • Serverは、アプリケーションがまたは多くサーバーでホストすることができます
  • または多くのアプリケーションを持つことができます
  • Serverは、1またはアプリのために多くの役割(DBサーバーを持っています役割、 WEBサーバーの役割など)
    • ie:ServerAには役割があります(WebサーバーとAPPX
    • 用DBサーバ、2つのロール)
    • サーバーAがAPPY

SERVERROLE以下のコードのための(Webサーバ)の役割を持っているがここで

仲介モデルである私が思っていものです。これまでのところうまく動作しますが、何か不足していますか?

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

私が正しくあなたの条件を理解している場合、これはより多くのあなたが

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

合理的に必要なもののようなものです - サーバは、多くのアプリケーションを持つことができ、アプリは、多くのサーバーを持つことができます。アプリケーションが特定のサーバー上にある場合は、多対多の関係でスルーモデルによって実装できる1つのロール(システム全体ではないにしても、非常に複雑で、書きにくいため)が必要です。

+0

あなたのコードと私の違いを理解しようとしています。あなたの2番目の文章:アプリが特定のサーバー上にある場合は、その上に1つの役割しか持たないはずです。これはそうではありません。 1つのサーバーは、特定のアプリケーションに対して複数の役割を持つことができます。例。サーバAは、ある特定のアプリケーション用のWebサーバ+プロキシサーバの役割を持つことがあります。 SAMEサーバーAは、APP Bのプロキシサーバーの役割を持っている可能性があります。しかし、おそらく私は間違っています。思考? – Stryker

+0

ええ、これは私があまりにも意味するものです。チェスアプリがサーバーAにある場合は、プロキシにすることができます。しかし、サーバAがサーバA上のチェスアプリの別のインスタンスをサーバAがレディスキャッシュとして機能するようにすることはできません。 – e4c5

+0

脇に、あなたのプロジェクトには関係ありません。データベースにするサーバーはデータベースでなければなりません。それ以外のポートは開いてはいけません。さらに、DBのハードウェア構成は、Webサーバーやmemcacheやredisと大きく異なる場合があります。だから彼らは本当に交通量の多い環境ですべての取引のジャックになろうとしてはいけません。 – e4c5

関連する問題