Почему меняется отношение «многие ко многим», когда я спрашиваю об этом, используя ORM Django? - PullRequest
1 голос
/ 01 декабря 2010

У меня рекурсивные отношения M2M с классом индикатора.Индикатор представляет собой целое число или вычисленное значение из 2 индикаторов:

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 не делает то же самое.Он может просто вернуть числовое значение или вычислить значение из числового значения каждого параметра из атрибута params.Как видите, params - это рекурсивные отношения м2м.

Теперь моя проблема в том, что у меня есть следующие показатели:

  • мужчины
  • женщины
  • общая популярность
  • соотношение мужчин

Если я добавлю men и women в качестве параметров total pop, все в порядке, и я получу свою общую популярностьдинамически рассчитывается.Но если я затем добавлю men и total pop в качестве параметров к men ratio, , тогда total pop автоматически получит men ratio в качестве параметра. Это нарушит все.

Почемутот?Как я могу избежать этого?

1 Ответ

3 голосов
/ 01 декабря 2010

Отношения M2M в Django по умолчанию симметричны, то есть в M2M, если относится к b, то b также относится к a. Чтобы остановить это, используйте symmetrical=False

ваши параметры станут:

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