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