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

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

标签: djangodjango-modelsdjango-viewsdjango-templatesdjango-urls

解决方案


您可以使用 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>

您还可以通过向按钮添加事件处理程序来实现这一点。在这里结帐这个很好的答案 它可能会帮助你更多。


推荐阅读