你可以那样做from django.db.models import F
def questions(request)
_reponse = Reponse.objects.update(total=F('total') + 1)
return render(request, 'vautmieux/test.html', {'reponse': _reponse})
如果您想添加一个按钮来增加计数器,那么您需要创建两个单独的视图,一个用于呈现html页面,另一个用于增加integerfield
所以你呢视图.py看起来像这样
^{pr2}$
在您的url中,您将看到:path('question_page/', views.questions, name='question-html'),
path('increase_counter/', views.IncreaseCounter, name='Increase-Counter')
最后,您只需添加一个按钮,将第二个视图作为目标: + 1
理想的方法是使用ajax,这样每次单击按钮时页面都不会刷新,为此,必须更改按钮的onclick函数并添加以下脚本: + 1
$.ajax({
url: '/increase_counter/',
method : 'POST',
success: function(response) {
alert('counter increased')
}
});
但是如果你想使用ajax,你必须在你的视图上添加一个csrf不受限制的装饰器。
为了更新模型中的特定对象,需要将pk作为变量传递到url中,如下所示:path('increase_counter//', views.IncreaseCounter, name='Increase-Counter')
在您的按钮中,您将循环更改按钮,如下所示: + 1
对于aajax来说,将pk添加到url中的方法是相同的。
在您看来,您将添加以下内容:def IncreaseCounter(request, pk):
_reponse = Reponse.objects.filter(pk=pk).update(total=F('total') + 1)
return HttpResponse('the counter has been increased')