【问题标题】:Activate or De-Activate Status in database through Ajax-JavaScript using Django (help)使用 Django 通过 Ajax-JavaScript 激活或取消激活数据库中的状态(帮助)
【发布时间】:2020-12-26 11:06:25
【问题描述】:

我正在尝试使用 Ajax-JavaScript 实现一个功能,其中当我单击激活选项时,数据库中该字段的值更改为“活动”,并在 HTML 页面上显示为活动消息。如果单击 De-Activate,文本将更改为 De-Active 以及它在数据库中的值并显示 De-Activated 消息

HTML 页面:

<div class="col-sm-5">
<div class="panel panel-primary">
 <div class="panel-heading">
   <h3 class="panel-title">Job activation status</h3>
 </div>
   <div class="panel-body">
      <td> Campus Name </td>
      <td> hod_name </td>
      <td>
        <select name="status" class="form-control">
            <option value="1">Active</option>
            <option value="2">Disabled</option>
        </select>
    </td>

  </div>
 </div>
 </div>

型号:

class Campus(models.Model):
    STATUS = (
        ('Active', 'Active'),
        ('Disabled', 'Disabled'),
    )
    campus_name = models.CharField(blank=True, max_length=30)
    hod_name = models.CharField(blank=True, max_length=25)
    status = models.CharField(max_length=10, choices=STATUS, default='Disabled', blank=True)
    def __str__(self):
        return self.campus_name

查看:

def status_update(request, pk):
    campus_status = get_object_or_404(Campus, pk=pk)
    campus_status.status = 'Active' if campus_status.status == 'Disabled' else 'Disabled'
    campus_status.save(update_fields=['status'])
    messages.success(request, '{} Status: {} successfully'.format(campus_status.campus_name, campus_status.status))
    return redirect('/dashboard/create_campus/')

【问题讨论】:

  • 那么问题是什么?
  • 这是我想在 Ajax 中执行的程序方法我想在这方面帮助我。

标签: jquery django ajax django-views


【解决方案1】:

HTML 页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
<div class="col-sm-5">
    <div class="panel panel-primary">
        <div class="panel-heading">
            <h3 class="panel-title">Job activation status</h3>
        </div>
        <div class="panel-body">
            <table>
                <tr>
                    <td> {{campus_name}}</td>
                    <td> {{campus_hod}}</td>
                    <td>
                        <select name="status" id="selected_value" onchange="myFunction('{{ campus.id }}')" class="form-control">
                            <option value="1">Active</option>
                            <option value="2">Disabled</option>
                        </select>
                    </td>
                </tr>

            </table>

        </div>
    </div>
</div>

</body>

<script>
    function myFunction(campus_id) {
        let x = document.getElementById("selected_value").value;
        $.ajax({
            url: "/status/update/" + campus_id,
            method: 'POST',
            headers: {'X-CSRFToken': '{{ csrf_token }}'},
            success: function (data) {
                console.log(data)
                window.location.replace("/dashboard/create_campus/");
            }

        });

    }
</script>
</html>

URL.py

from django.urls import path
from .views import status_update
urlpatterns = [
    path('status/update/<str:pk>', status_update, name="status update")
]

查看:

import json

from django.contrib import messages
from django.shortcuts import get_object_or_404
from django.http import JsonResponse

# Create your views here.
def status_update(request, pk):
    if request.method == 'POST':
        request_data = json.loads(json.dumps(request.POST))
        campus_status = get_object_or_404(Campus, pk=pk)
        campus_status.status = 'Active' if campus_status.status == 'Disabled' else 'Disabled'
        campus_status.save()
        message = {'message': 'Status Updated Successfully', 'status': 'success'}
        messages.success(request,'{} Status: {} successfully'.format(campus_status.campus_name, campus_status.status))
        return JsonResponse(data=message, status=200, safe=False)

型号:

class Campus(models.Model):
    STATUS = (
        ('Active', 'Active'),
        ('Disabled', 'Disabled'),
    )
    campus_name = models.CharField(blank=True, max_length=30)
    hod_name = models.CharField(blank=True, max_length=25)
    status = models.CharField(max_length=10, choices=STATUS, default='Disabled', blank=True)
    def __str__(self):
        return self.campus_name

【讨论】:

  • 它可以工作,但它发送整个索引页面数据,我希望它只更新表的选择部分。
  • 没有得到,能否请您分享截图或工作代码github链接。会调查的。
  • 截图ibb.co/bLDyVPG链接是我分享的(ImgBB)网站
  • 我查看了图像,没有清除任何内容。整个索引页面数据是什么意思。最好你分享github链接。
【解决方案2】:

AJAX 基本上是来自客户端代码(即 JavaScript)的异步请求,而不是 Django 服务器端功能。可以使用 jQuery 或任何其他 JavaScript 库或框架在您的 Django 应用程序中实现 AJAX。

参考以下两个链接了解如何在 DJANGO 应用程序中实现 AJAX

Ajax with jQuery Django example

这是另一个 SO 答案的link,其中包含更多详细信息。

我没有修改您的代码以使用 Ajax,我相信您可以通过参考提供的链接自己完成。

如果您有任何问题,请告诉我。

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    相关资源
    最近更新 更多