使用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(以及如何将它们全部替换)。
谢谢!
答案 0 :(得分:10)
您不需要位于mongoengine中$
的位置运算符__S__
,因为您没有替换/更新列表中的位置。
由于您可能不想重复标记,因此应使用$addToSet。你可以在mongoengine中这样做:
ItemData.update(add_to_set__tags=['tag1', 'tag2'])
将列表传递给add_to_set
会自动将其转换为$addToSet
$each
。