2011-01-16 13 views
1

私は現在、既存のデータベースの上に新しいタグ付けシステムを実装しています。Djangoモデル;保存時にManyToManyフィールドに余分な項目を保存する

現在のタグ付けシステムではManyToManyフィールドが使用されますが、クライアントはコンマで区切られた入力フィールド(CharField)を使用します。

私は、現在のアーキテクチャを危険にさらすことなく、新しいコンマ区切りのフィールドを有効にすることですが、これまでのManyToManyアーキテクチャとしてタグを書き留めておくことが最良の方法を考え出しました。

しかし、私はそれをやろうとしますが、タグはデータベースタグモデルに保存されますが、適用するエントリには保存されません。

シンプルランダウン:

def save(self, *args, **kwargs): 

    currTags = self.placeHolderTags.split(",") 

    for tag in currTags: 
     dbtag, created = Tag.objects.get_or_create(name=tag) 
     self.tags.add(dbtag) 

    super(BeeldBankEntry, self).save(*args, **kwargs) 

さらにモデルの背景:

tags   = models.ManyToManyField(Tag, verbose_name='Tags', blank=True) 
placeHolderTags = models.CharField(max_length=400, verbose_name='Tags2', blank=True) 
+0

get_or_create()はクエリーセットを返します。get_or_create()[0]を試してみましたか? – crodjer

+0

get_or_createは無限ループを引き起こす(オブジェクト、created_flag) –

答えて

2

これは、モデル自体AFTER M2M分野を保存ジャンゴする予定です。 save()でコードを保存すると助けになるかどうか分かりませんが、m2m_changeシグナルを見れば、必要なもののように見えます。

+0

のタプルを返しますが、私はsuper.save()の後にタグの追加を移動していますが、実際には機能しませんでした。私はその信号を見て、有望だと思われる。 – Kasper

+0

シグナルが機能しました! – Kasper

関連する問題