2010-12-01 3 views
1

私は、インジケータクラスとの再帰的なM2M関係を持っています。Django ORMを使用して、この多対多の関係が私に求めているのはなぜですか?

class Indicator(models.Model): 


    params = models.ManyToManyField('self', 
           verbose_name=__(u'parameters'), 
           related_name='params_of', 
           blank=True, null=True) 

    type = models.CharField(max_length=64, verbose_name=__(u'type')) 

    def get_value(self, record): 

     # etc 

はタイプによると、GET_VALUEが同じことをしません:インジケータはint型、または2つの指標から算出した値です。 params属性から数値を返すか、各パラメータの数値から値を計算するだけです。ご覧のとおり、paramsは再帰的なm2m関係です。

今私の問題は、私がfollwoing指標持っているということです。

  • 男性を
  • 女性
  • 総ポップ
  • 男性比

私はmenwomenなどを追加した場合total popのパラメータはすべて正常です。 ated。しかし、私がmen ratiomentotal popをパラメータとして追加すると、total popは自動的にmen ratioをパラメータとして取得します。すべてが壊れています。

なぜですか?どうすればそれを避けることができますか?

答えて

3

DjangoのM2Mリレーションシップはデフォルトでは対称です。つまり、aがbに関連し、bがbにも関連する場合はM2Mです。これを停止するには、使用symmetrical=False

あなたのparamsはなる:多くのことができます

params = models.ManyToManyField('self', 
           verbose_name=__(u'parameters'), 
           related_name='params_of', 
           blank=True, null=True, 
           symmetrical=False) 
+0

感謝の男、。 –