如何通过简单地单击没有任何形式的按钮来更新 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"),

这就是我尝试的全部。问题是当我按下按钮时,它只是刷新页面而不是更新数据库中的状态值。

【问题讨论】:

instancelisting 一样吗? 是的。我也尝试过列出,但效果相同。 问题依然存在,但它刷新了页面。虽然我将实例更改为列表。 只是想确保您在此处添加了准确的代码。如果状态发生变化,您是否尝试过从数据库中检查它?如果您以某种方式缓存页面? 你可以使用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 模型的数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过使用 Vue.js 中的路由器概念单击按钮来简单地从一个组件(主页)导航到另一个组件

单击“重力形式”输入按钮时触发 jquery

如何在反应中更新按钮单击ag网格中的行

如何通过单击一个简单的按钮在 android 中显示日历

如何通过单击按钮来更新表值?

如何通过仅单击该行中的一个值来显示该行中的所有值