在post_save上添加M2M

时间:2018-10-01 20:01:18

标签: python django m2m

我有一个具有m2m关系的对象,保存后我想填充它。

问题是信号被触发,但是命令add不起作用。我确实使用python shell尝试了相同的步骤,并且效果很好。

class Event(models.Model):
  name = models.CharField(max_lenght=40)
  location = models.ManyToManyField('Location')

class Location(models.Model):
   address = models.CharField(max_lenght=60)


@receiver(post_save, sender=Event)
def populate_location(sender, instance, **kwargs):
   instance.locations.add(*Locations.objects.all())

有任何提示吗?

2 个答案:

答案 0 :(得分:0)

如果要添加所有可以使用set()而不是add的对象,可以查看文档-https://docs.djangoproject.com/en/2.1/ref/models/relations/#django.db.models.fields.related.RelatedManager.set

另一个建议,如果您使用的是add,请在执行后立即尝试打印instance.locations-instance.locations.add(*Locations.objects.all())并发布结果。

答案 1 :(得分:0)

我找到了解决方案。我忘了提及我要从管理员保存的内容,这似乎是至关重要的细节,对此感到抱歉。

https://timonweb.com/posts/many-to-many-field-save-method-and-the-django-admin/