2013-06-27 6 views
4

Эй, ребята, я разрывал волосы этой проблемой целый день, и я не могу найти способ исправить это: /. Таким образом, в основном I`m пытается предварительно заполнить поле many2many на сохранении модели через другой many2many поля в одной и той же модели:Prepopulating Django M2M field, основанный на другом M2M

class CommissionReport(models.Model): 
    ... 
    law = models.ManyToManyField('Law', blank=True, null=True) 
    categories = models.ManyToManyField('LawCategory', blank=True, null=True) 
    ... 

Модель Закон имеет категорию поле, которое Many2Many к LawCategory и им пытаются поймать его и добавить те, категорий к категориям модели CommissionReport. Так им с помощью сигнала и способа, здесь код:

@staticmethod 
def met(sender, instance, action, reverse, model, pk_set, **kwargs): 

     if action == 'post_add': 
      report = CommissionReport.objects.get(pk=instance.pk) 

      if report.law: 
       for law in report.law.all(): 

        for category in law.categories.all(): 
         print category 
         report.categories.add(category) 

      report.save() 

m2m_changed.connect(receiver=CommissionReport.met, sender=CommissionReport.law.through) 

Это фактически выводит правильные категории, но Безразлично `добавить их или сохранить их в модель.

Заранее спасибо.

+0

Является ли 'категория'' LawCategory'? – karthikr

+1

Да «категория» является одной из LawCategory, связанной с законом :) –

ответ

0

Вместо того, чтобы получать отчет, вы можете повторно использовать данный экземпляр. Вроде так:

@staticmethod 
def met(sender, instance, action, reverse, model, pk_set, **kwargs): 

     if action == 'post_add': 
      if instance.law: 
       for law in instance.law.all(): 
        for category in law.categories.all(): 
         instance.categories.add(category) 

      instance.save() 

m2m_changed.connect(receiver=CommissionReport.met, sender=CommissionReport.law.through) 
+1

Благодарим за отзыв, но это была первая вещь, которую я пробовал, и по необъяснимой причине она не работает, после сохранения поля категорий все еще пусто. Консоль печатает в последнем цикле правильные категории и никаких ошибок. –

+0

Есть ли у вас транзакции и может быть другой запрос, который вызывает ошибку? что может привести к откату – Alp