基于另一个M2M预填充Django M2M字段

2024-04-20 03:59:14 发布

您现在位置:Python中文网/ 问答频道 /正文

嘿,伙计们,我已经为这个问题扯了一整天的头发,我似乎找不到办法来解决它:/。因此,基本上,我试图通过同一模型中的另一个many2many字段预填充many2many字段来保存模型:

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

Law模型有category字段,这个字段比lawcegory多很多,我正在尝试捕获它并将这些类别添加到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)

它实际上打印的是正确的类别,但不会将它们添加或保存到模型中。你知道吗

提前谢谢。你知道吗


Tags: 模型reporttruemodels类别nullcategoriesblank
1条回答
网友
1楼 · 发布于 2024-04-20 03:59:14

您可以重用给定的实例,而不是获取报表。像这样:

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

相关问题 更多 >