0
使用post_save M2M关系时添加方法行不通
我Content
模式有many-to-many
关系到Tag
模型。当我保存Content
对象时,我想动态添加关系。我以下面的方式来做这件事。试图建立在Django
def tag_content(obj):
for tag in Tag.objects.all():
print tag
obj.tags.add(tag)
obj.is_tagged = True
obj.save()
class Tag(models.Model):
name = models.CharField(max_length=255)
class Content(models.Model):
title = models.CharField(max_length=255)
is_tagged = models.BooleanField(default=False)
tags = models.ManyToManyField(Tag, blank=True)
def save(self, *args, **kwargs):
super(Content, self).save(*args, **kwargs)
@receiver(post_save, sender = Content)
def update_m2m_relationships_on_save(sender, **kwargs):
if not kwargs['instance'].is_tagged:
tag_content(kwargs['instance'])
的tag_content
功能运行,但是,m2m
关系不成立。我使用Django 1.9.8 btw。这没有意义。我错过了什么?此外,如果我在shell中执行诸如tag_content(content_instance)
之类的操作,那么将设置标记,因此该函数可以正常工作。我想问题在于接收器。任何帮助?
编辑
我的问题无关m2m_changed,正如我刚才所说,创造壳内容对象的作品完美。因此,问题在于管理面板的设置。
你可以验证'update_m2m_relationships_on_save'是否被调用,并且它正在接收正确的kwargs?这就是我个人的调试方式。因为你似乎已验证所有其他作品... – shark3y
是的。 'print tag'就是这样,是的,save方法正在调用update_m2m方法。 –
尝试在接收者的'if'语句之前打印'kwargs ['instance']'和'kwargs ['instance']。is_tagged',以确保对象和布尔值都是你期望的 – souldeux