使用Mongoengine添加和更新ListField

时间:2013-05-19 21:41:24

标签: mongoengine listfield

使用Mongoengine并尝试形成标签云。对于每个项目,我想附加一个或多个标签。这里使用类似标签的东西(在每个问题下面)。

在这里搜索和阅读了很多帖子之后,我仍然无法正确地将新条目添加到ListField,或者如何替换它们。

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

我正在尝试使用表单推送一个或多个新标签并收集发布的结果。在我的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(个人资料:5185505b73ea128e878f4e82)(仅限列表和   元组可以在列表字段中使用:['tags'])

显然我使用的是错误的类型,但我迷失了如何解决这个问题。 奇怪的是,由于某种原因,数据被附加到记录中..(发布“测试”和刷新浏览器)

  

“tags”:[“test”,“test”]}

可以向我展示一个小例子,如何处理发布的字符串(来自HTML表单)并将其正确地推送到ListField(以及如何将它们全部替换)。

谢谢!

1 个答案:

答案 0 :(得分:10)

您不需要位于mongoengine中$的位置运算符__S__,因为您没有替换/更新列表中的位置。

由于您可能不想重复标记,因此应使用$addToSet。你可以在mongoengine中这样做:

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

将列表传递给add_to_set会自动将其转换为$addToSet $each

相关问题