8

Mongoengine を使用して、タグ クラウドを形成しようとしています。各アイテムに 1 つ以上のタグを付けたいと思います。タグのようなものがここで使用されています (各質問の下)。

ここで多くの投稿を検索して読んだ後でも、ListField に新しいエントリを追加する適切な方法、またはそれらを置き換える方法がまだわかりません。

class Item(Document):
    tags = ListField(StringField(max_length=300))

フォームを使用して 1 つ以上の新しいタグをプッシュし、投稿された結果を収集しようとしています。私のviews.pyには、次のチェックがあります。

if 'tags' in request.POST and request.POST['tags'] <> '':
   for Tag in request.POST.getlist('tags'):
       ItemData.update(push__tags__S__tags=Tag)

プッシュしようとすると失敗します:

ValidationError (Profile:5185505b73ea128e878f4e82) (リスト フィールドで使用できるのはリストとタプルのみです: ['tags'])

明らかに間違ったタイプを使用していますが、これを解決する方法がわかりません。奇妙なことは、何らかの理由でデータがレコードに追加されていることです..(「テスト」を投稿し、ブラウザを更新しました)

「タグ」: [「テスト」、「テスト」] }

投稿された文字列を (HTML フォームから) 処理し、ListField に適切にプッシュする方法 (およびそれらすべてを置き換える方法) の小さな例を教えてください。

ありがとう!

4

1 に答える 1

15

リスト内の位置を置換/更新していないため、mongoengine$に相当する位置演算子は必要ありません。__S__

おそらくタグを繰り返したくないので、$addToSetを使用する必要があります。次のようにmongoengineでこれを行うことができます:

ItemData.update(add_to_set__tags=['tag1', 'tag2'])

リストを to に渡すと、add_to_set自動的に$addToSetwithに変換され$eachます。

于 2013-05-20T07:57:21.243 に答える