我正在用MongoDB制作一个在线商业术语词典。我想让人们能够上下投票。我正在处理CRUD,但我对更新部分记录的语法有点困惑。
我有一个模板:
<div class="col s-12 m-9 l10 text-center cyan-text text-darken-3 dict-cta">
<a href="{{url_for('like', entry_id=entry._id)}}">
<i class="far fa-thumbs-up"></i></a>
</div>逻辑是,当单击"like“时,代码应该从字典中提取"love_percent",转换为整数(如果不存在则提供值为零),添加1,转换为字符串,并在同一个ObjectID中进行更新。这是我为该路线编写的代码:
@app.route("/like/<entry_id>")
def like(entry_id):
entry = mongo.db.jargon.find_one({"_id": ObjectId(entry_id)})
value = int(entry["love_percent"][0])
value += 1
value = str(value)
entry.update_one({"_id": ObjectId(entry_id)},
{"$set": {
love_percent[0]: value
}})
return render_template("jargon.html") 我试过使用update或存储整数,但这似乎解决了它。一位朋友建议update_one,但我基本上有点困惑和迷失。
有人能告诉我我在这里错过了什么或者更好的方法吗?
(我知道这并不能阻止来自同一用户的多个投票;这种功能可以在稍后实现。)
这本字典是在这里用Heroku制作的,我已经把它推到了bug:行话上。
我在回溯中得到以下错误: AttributeError:'dict‘对象没有属性'update_one’
此代码的存储库位于Github:https://github.com/dandavies23/jargon-unchained中。
发布于 2021-12-12 08:50:11
根据我对这个问题的理解。
您需要更改以下内容:
value = int(entry["love_percent"])mongo.db.jargon.update_one({"_id": ObjectId(entry_id)},
{"$set": {
"love_percent" : value
}})试着说出评论中遇到的问题。
发布于 2021-12-12 16:15:17
删除,我认为这不是一个位置,而是一个默认的整数。已解决的问题使每个条目在数据输入上默认为55。
我还用函数中未定义的术语重新呈现模板。用重定向修正了。
def like(entry_id):
entry = mongo.db.jargon.find_one({"_id": ObjectId(entry_id)})
value = int(entry["love_percent"])
value += 1
value = str(value)
mongo.db.jargon.update_one({"_id": ObjectId(entry_id)},
{"$set": {
"love_percent": value
}})
return redirect(url_for("get_jargon"))https://stackoverflow.com/questions/70322057
复制相似问题