我想从我的页面创建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()
杨__羊羊
TA贡献1943条经验 获得超7个赞
要将 1 添加到模型实例的vote_up属性category_request,您可以直接操作对象的属性:
category_request.up_vote += 1
category_request.save()
这就是你要找的吗?
添加回答
举报
0/150
提交
取消