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

我想从我的页面创建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 的新手 ^^


慕斯王
浏览 268回答 3
3回答

不负相思意

仅将值加 1 并保存模型实例可能会导致竞争条件情况。如果两个用户同时调用 up_vote 函数,您可能会失去他们的一些选票。为避免竞争条件,您应该使用select_for_update方法(如果您的数据库支持此类操作)。或者使用F()表达式。在这种情况下,数据库会增加实际值,而不是之前存储在内存中的值(可能已经过时)from django.db.models import F...category_request.up_vote = F('up_vote') + 1category_request.save()

杨__羊羊

要将 1 添加到模型实例的vote_up属性category_request,您可以直接操作对象的属性:category_request.up_vote += 1category_request.save()这就是你要找的吗?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python