我遇到了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
问题是django管理员。我在这里找到了一个解释:http://timonweb.com/posts/many-to-many-field-save-method-and-the-django-admin/
解决django admin
中问题的代码def save_related(self, request, form, formsets, change):
super(SupplierAdmin, self).save_related(request, form, formsets, change)
form.instance.set_generic_locations()
答案 0 :(得分:2)
由于数据库结构的不同,ManyToManyFields对信号的工作方式略有不同。您需要使用m2m_changed信号
,而不是使用post_save信号答案 1 :(得分:0)
对于manytomanyfield,您必须先保存父对象(),然后添加