如何通过简单地单击没有任何形式的按钮来更新 django 模型的数据?
Posted
技术标签:
【中文标题】如何通过简单地单击没有任何形式的按钮来更新 django 模型的数据?【英文标题】:How do I update data of django model by simply clicking on a button without any form? 【发布时间】:2021-09-18 14:07:34 【问题描述】:我正在开发一个 Django 项目。我的动机是通过简单地单击一个按钮来更新数据库中的状态值。我不想提交任何表格。这是我尝试过的:
Models.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 模板中的按钮。
template.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函数:
views.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))
urls.py
path("<int:list_id>",views.display_list,name="displaylistitem"),
path("<int:list_id>", views.status,name="status"),
这就是我尝试的全部。问题是当我按下按钮时,它只是刷新页面而不是更新数据库中的状态值。
【问题讨论】:
是instance
和listing
一样吗?
是的。我也尝试过列出,但效果相同。
问题依然存在,但它刷新了页面。虽然我将实例更改为列表。
只是想确保您在此处添加了准确的代码。如果状态发生变化,您是否尝试过从数据库中检查它?如果您以某种方式缓存页面?
你可以使用ajax
来做这个小改动,它也可以避免重新加载页面来进行这个简单的改动。 refer this
【参考方案1】:
您可以使用 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>
您也可以通过向按钮添加事件处理程序来实现这一点。 签出这个很棒的答案here 它可能对您有更多帮助。
【讨论】:
以上是关于如何通过简单地单击没有任何形式的按钮来更新 django 模型的数据?的主要内容,如果未能解决你的问题,请参考以下文章