マイコンテンツモデルにタグモデルとの多対多の関係があります。 Contentオブジェクトを保存するときに、関係を動的に追加する必要があります。私はこれを次のようにしています。非ハッシュタイプ:Djangoでpost_saveを使用してm2mリレーションシップを動的に追加しようとすると 'list'エラーが発生する
def tag_content(obj):
obj.tags.add([1,2,3])
obj.is_tagged = True
obj.save()
return obj
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'])
基本的には、コンテンツオブジェクトが保存されている場合、受信機は、順番にM2M関係を追加するtag_contentメソッドを呼び出しpost_saveメソッドを呼び出すために使用されています。しかし、私はこのエラーを受け取ります:
TypeError
unhashable type: 'list'
具体的には.add()関数を参照しています。なぜ私はこのエラーが表示されますか?どんな助けもありがとうございます。また、データベースにids = 1、2、3のTagオブジェクトがあることに注意してください。
EDIT
さてさて、私はこのような何かに私のtag_contentを変更:
def tag_content(obj):
for tag in Tag.objects.all():
print tag
obj.tags.add(tag)
add()メソッドは、オブジェクトインスタンスではなく、IDSにかかるためです。しかし、それでも動作しません:/私はエラーはありませんが、関係は単に確立されていません。
これは、print tagコマンドが機能し、タグを出力するので、特に奇妙です。つまり、関数が呼び出されています。助けてください? Btw、私はDjango 1.9.8を実行しています。
実行中のDjangoのバージョンは? –
re:あなたの編集、あなたは 'obj.save()'を実行していますか?あなたは以前のバージョンでやったよ –
はい私はsaveメソッドを実行しています。 –