django - 如何通过简单地单击没有任何形式的按钮来更新 django 模型的数据?
问题描述
我正在做一个 Django 项目。我的动机是通过简单地单击一个按钮来更新数据库中的状态值。我不想提交任何表格。这是我尝试过的:
模型.py
class auction_listing(models.Model):
title = models.CharField(max_length=100)
status = models.BooleanField(default=True)
def __str__(self):
return f"{self.id} : {self.title} "
这里的状态是布尔字段。默认情况下是真的。这里不需要表格,但我希望通过单击按钮来更改此状态。这是我的 HTML 模板中的按钮。
模板.html
<div style="margin-top: 2%;">
<form action="{% url 'status' list.id %}" method="POST">
{% csrf_token %}
<button type="submit" class="btn btn-danger">Close</button>
</form>
</div>
这是我的views.py函数:
视图.py
def status(request,list_id):
listing = auction_listing.objects.get(pk=list_id)
if request.method == "POST" and listing.status is True:
listing.status = False
listing.save()
else:
listing.status = True
listing.save()
return HttpResponseRedirect(reverse("displaylistitem",kwargs={"list_id":list_id}))
网址.py
path("<int:list_id>",views.display_list,name="displaylistitem"),
path("<int:list_id>", views.status,name="status"),
这就是我所尝试的。问题是当我按下按钮时,它只是刷新页面而不是更新数据库中的状态值。
解决方案
您可以使用 ajax 来做到这一点。只需在按钮单击时调用 javascript 函数并使用 ajax 请求 django 视图。
<div style="margin-top: 2%;">
<form action="{% url 'status' list.id %}" method="POST">
{% csrf_token %}
<button onclick="DoSomething();" class="btn btn-
danger">Close</button> // added onlick="DoSomething();"
</form>
</div>
<script>
function DoSomething(){
data = 'some data'
$.ajax({
type: 'POST',
url: 'getuser/',
data: data,
processData: false,
contentType: false,
success: function(json) {
alert(json);
}
})
}
</script>
您还可以通过向按钮添加事件处理程序来实现这一点。在这里结帐这个很好的答案 它可能会帮助你更多。