django post_save 信号和 ManyToManyField (和 Django Admin)

2024-05-20

我的 post_save 函数有问题。该函数已正确触发,但实例不包含插入的值。我用ipdb检查了该功能,没有任何问题。只是 ManyToManyField 是空的。

代码:

@receiver(post_save, sender=Supplier)
def set_generic_locations(sender, instance, **kwargs):
    """ Set the generic locations for the NEW created supplier.
    """
    created = kwargs.get('created')
    if created:
        glocations = LocationAddress.get_generic_locations()

        for location in glocations:
            instance.locations.add(location)

        instance.save()

实例中使用的字段:

locations = models.ManyToManyField(LocationAddress, blank=True)​

我不明白为什么,但这些位置总是空的。

我使用 django 1.8.8

UPDATE

问题是 django 管理员。我在这里找到了一个解释:http://timonweb.com/posts/many-to-many-field-save-method-and-the-django-admin/ http://timonweb.com/posts/many-to-many-field-save-method-and-the-django-admin/

解决django管理中问题的代码

def save_related(self, request, form, formsets, change):
    super(SupplierAdmin, self).save_related(request, form, formsets, change)
    form.instance.set_generic_locations()

由于数据库结构的差异,ManyToManyFields 与信号的工作方式略有不同。您需要使用而不是使用 post_save 信号m2m_更改 https://docs.djangoproject.com/en/1.9/ref/signals/#m2m-changed signal

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

django post_save 信号和 ManyToManyField (和 Django Admin) 的相关文章

随机推荐