为了账号安全,请及时绑定邮箱和手机立即绑定

在 Django 视图中计算 i+1 或 i-1

在 Django 视图中计算 i+1 或 i-1

慕斯王 2021-10-05 16:02:51
我想从我的页面创建up-vote一个down-vote视图category_request,但是如何计算整数字段。应该由i+1或完成i-1?def category_request_up_vote (request, pk):    category_request = get_object_or_404(CategoryRequests, pk=pk)    try:        if request.method == 'GET':            category_request.up_vote() << here i guess            messages.success(request, 'You have successfully Provided an Up-Vote for this Request')            return redirect('category_request_detail', pk=category_request.pk)        else:            messages.success(request, 'Uuups, something went wrong, please try again.')            return redirect('category_request_detail', pk=category_request.pk)    except Exception as e:        messages.warning(request, 'Uuups, something went wrong, please try again. Error {}'.format(e))模型.py...up_vote = models.IntegerField(default=0)down_vote = models.IntegerField(default=0)...我想我不必提及我是 Python/Django 的新手 ^^
查看完整描述

3 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

仅将值加 1 并保存模型实例可能会导致竞争条件情况。如果两个用户同时调用 up_vote 函数,您可能会失去他们的一些选票。


为避免竞争条件,您应该使用select_for_update方法(如果您的数据库支持此类操作)。


或者使用F()表达式。在这种情况下,数据库会增加实际值,而不是之前存储在内存中的值(可能已经过时)


from django.db.models import F


...

category_request.up_vote = F('up_vote') + 1

category_request.save()


查看完整回答
反对 回复 2021-10-05
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

要将 1 添加到模型实例的vote_up属性category_request,您可以直接操作对象的属性:


category_request.up_vote += 1

category_request.save()

这就是你要找的吗?


查看完整回答
反对 回复 2021-10-05
  • 3 回答
  • 0 关注
  • 264 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信