gpt4 book ai didi

python - 如何通过使用 Django 单击 HTML 中的按钮来更改数据库中的数据

转载 作者:行者123 更新时间:2023-12-05 03:59:28 24 4
gpt4 key购买 nike

我有一个 Django 迷你项目。我只有一个带有计数器 total 的模型:

class Reponse(models.Model):
total = models.IntegerField()

我的看法是:

def questions(request):
_reponse = get_object_or_404(Reponse, id= 1)
return render(request, 'vautmieux/test.html', {'reponse': _reponse})

我的 HTML test 显示变量 total:

<p id="block1">
{{reponse.total}}
</p>

我的问题是:

我希望当我点击 HTML 中的按钮时,变量 total 增加 1。我怎样才能做到这一点 ?使用表单 POST 或 GET ?可能有更好的方法吗?

像这样的按钮:

<p id="block1">
{{reponse.total}}
</p>
<button type="button">
Click for increase total by 1
</button>

最佳答案

你可以这样做

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})

如果你想添加一个按钮来增加计数器,那么你需要创建两个单独的 View ,一个用于呈现 html 页面,另一个用于增加 integerfield所以你的 views.py 看起来像这样

from django.db.models import F
from django.views.decorators.csrf import csrf_exempt
def questions(request)
return render(request, 'vautmieux/test.html', {'reponse': _reponse})
@csrf_exempt
def IncreaseCounter(request):
_reponse = Reponse.objects.update(total=F('total') + 1)
return HttpResponse('the counter has been increased')

在您的网址中,您将拥有:

path('question_page/', views.questions, name='question-html'),
path('increase_counter/', views.IncreaseCounter, name='Increase-Counter')

最后你只需要添加一个按钮来定位第二个 View :

<button onclick="window.location.href='/increase_counter/';"> + 1 </button>

理想的方法是使用 ajax,这样您的页面就不会在您每次单击按钮时都刷新,为此您必须更改按钮的 onclick 函数并添加以下脚本:

<button onclick="increase_counter()"> + 1 </button>

<script type="text/javascript">
$.ajax({
url: '/increase_counter/',
method : 'POST',
success: function(response) {

alert('counter increased')
}
});
</script>

但是如果你想使用 ajax,你必须在你的 View 上添加一个 csrf_exempt 装饰器。

为了更新模型中的特定对象,您需要将 pk 作为变量传递到您的 url 中,如下所示:

path('increase_counter/<int:pk>/', views.IncreaseCounter, name='Increase-Counter')

在您的按钮中,您将循环更改按钮,如下所示:

<button onclick="window.location.href='/increase_counter/{{ response.pk }}/';"> + 1 </button>

对于 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')

关于python - 如何通过使用 Django 单击 HTML 中的按钮来更改数据库中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57136728/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com