Myコンテンツモデルは、タグモデルと多対多の関係にあります。 Contentオブジェクトを保存するときに、関係を動的に追加する必要があります。私はこれを次のようにしています。Djangoのsaveメソッドで多対多リレーションシップを動的に追加する
# models.py
def tag_content(content_id):
obj = Content.objects.get(pk=content_id)
print obj # Checking
obj.tags = [1, 2, 3] # Adding the relationships using the Tag IDs
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)
if not self.is_tagged:
tag_content(self.pk) # calling the tagging method
つまり、Contentオブジェクトが保存されると、タグフィールドは3つの異なるTagオブジェクトモデルに関連付けられます。ちょうどあなたに知らせるために、私はpks = 1、2、3のタグをデータベースに持っています。
ただし、これはうまくいきません。 saveメソッドは、print obj文が機能するので、tag_contentメソッドを呼び出します。ただし、多対多フィールドは設定されておらず、空のままです。面白いのは、シェルで次のコマンドを実行すると、タグフィールドが完全に設定されていることです。
# python manage.py shell
from myapp.models import *
obj = Content.objects.get(pk=1)
tag_content(obj.pk)
どのようにシェルバージョンが動作しますが、他のバージョンは動作しませんか?どんな助けもありがとうございます。
問題の原因ではありませんが、Contentアイテム自体をpkではなくtag_contentに渡すのはなぜですか?その後、データベースから再クエリする必要はありません。 –
良い点。これを行います。しかし、あなたが言ったように、私の問題の解決策ではありません。 –