更改功能+ ajax无法将值参数从选择框发送到Django视图(以进行依赖下拉)

所以我有2个选择框,第一个选择框具有数据库具有的架构列表(我在DBEAVER中使用oracle) 所以目录就像

Oracle - databasename
|Schema
  |A
  |B
  |C
  |D
  |E
    |Tables
       |POLLS_TableAll
       |DJANGO_ADMINUSER
       |etc
    |Views
    |Sequence
    |Types
    |etc
  |F
  |G

polls_tableall具有2个属性,我们要手动插入数据的table_id和table_name取决于架构列表,并且我们将表ID递增

附言:table_name是架构(我的朋友将其命名为table,请为它命名)

tableid     table_name
1           A
2           B
3           C
4           D
5           E
6           F
7           G
8           H

所以我想要做一个依赖的选择框(下拉列表)

第一个下拉列表有一个table_name列表(我已经完成了) 例如,当我选择“ E”时,第二个下拉列表将显示POLLS_TableAll,Django_Adminuser等

models.py


import datetime

from django.db import models
from django.utils import timezone
from django import forms

class TableAll(models.Model):
    table_name = models.CharField(max_length=250)

views.py

from django.http import Http404
from django.shortcuts import get_object_or_404,render,redirect
from django.template import loader
from django.http import HttpResponse,HttpResponseRedirect
from django.urls import reverse
from django.views import generic
from django.utils import timezone
from django.contrib.auth import authenticate,login
from django.contrib.auth.forms import UserCreationForm,AuthenticationForm
from django.contrib import messages
from django.template.loader import render_to_string
from django.contrib.auth.models import User
from .models import TableAll

#for first select box
def list_all_table(request):    
  obj = TableAll.objects.all()
  context = {
       'obj' : obj
  }
  return render(request,'define_segment.html',context)

# for second select box
def load_data(request):
    table_name = request.GET.get('table_name')
    dsn_tns = cx_Oracle.makedsn('IP','PORT',sid='SID')
    conn = cx_Oracle.connect(user=r' ',password=' ',dsn=dsn_tns)
    c = conn.cursor()
    obj2 = c.execute ("SELECT table_name FROM ALL_TABLES WHERE owner = '"+table_name+"'")
    context = {
       'obj2' : obj2
    }
    return render(request,data_list.html,context)

urls.py

from django.urls import path
from django.views.generic.base import TemplateView
from . import views

app_name = 'polls'
urlpatterns = [
            path('',views.login_view,name='login'),path('home/',views.index_view,name='indexing'),path('profile/',views.profile_view,name='profile'),path('chatroom/',views.chatroom,name='chat_room'),path('lockscreen/',views.lockscreen,name='lock_screen'),path('newsegment/',views.createsegment,name='newsegment'),path('definesegment/',views.list_all_table,name='definesegment'),path('manageuser/',views.manageuser,name='manageuser'),path('approvallist/',views.approvallist,name='approvallist'),path('approvalhistory/',views.approvalhistory,name='approvalhistory'),path('ajax/load-data',views.load_data,name='load-data'),]

define_segment.html

{% load static %}

{% block content %}
<script>
       $(document).ready(function()
       {
          $('#tableselect').change(function() {
          var url = "{% static url 'load-data' %}";
          var table_name = $(this).val();
          $.ajax({
            url : url,data : {
              'table_name' = table_name
            },success : function(data){
               $('#dataselect').html(data);
            }
           });
         });
       });
</script>
 ...
<form class="form-horizontal  style-form" action="#">
       <div class="form-group">
             <label class="control-label col-md-3">Database Name</label>
                  <div class="col-md-4">
                        <div class="input-group bootstrap-timepicker">
                              <div class="btn-group">
                                  <select id="tableselect" style="width:425px;background-color:white;height:30px;font-color:red;text-align-last:center;">              
                                    <!-- <li><a href="#"></a></li> -->
                                       {% for table_name in obj %}
                                        <option value="{{table_name.table_name}}">{{ table_name.table_name }}
                                      {% endfor %}                          
                                    <!-- <li><a href="#">Dropdown link</a></li> -->
                                    </option>
                                </select>                    
                           </div>
                      </div>
                </div>
           </div>
           <div class="form-group">
                 <label class="control-label col-md-3">Table Name</label>
                       <div class="col-md-4">
                           <div class="input-group bootstrap-timepicker">
                               <div class="btn-group">
                                    <select id ="dataselect" style="width:425px;background-color:white;height:30px;font-color:red;text-align-last:center;">              


                                    </select>                    
                             </div>
                          </div>
                      </div>
                  </div>
        </form>

...
{% endblock %}

0001_initial.py

from django.db import migrations,models
from django.contrib.auth.models import User
import django.db.models.deletion

class Migration(migrations.Migration):

   initial = True

   dependencies = [
   ]

   role = models.CharField(max_length=250)
   role.contribute_to_class(User,'role')    

   operations = [
        migrations.CreateModel(
           name='TableAll',fields=[                
               ('id',models.AutoField(auto_created=True,primary_key=True,serialize=False,verbose_name='ID')),('table_name',models.CharField(max_length=250)),],),]

data_list.html#如果ajax成功,则加载选项值

{% for data in obj %}
     <option value="{{ data.table_name }}">{{ data.table_name }}</option>
{% endfor %}

我有什么不对吗?当我选择选项时,它不会发送任何参数,就像没有视图功能的HTML一样。

也许有人可以在这里修复代码,或者我想念的是什么,谢谢

laodongbei 回答:更改功能+ ajax无法将值参数从选择框发送到Django视图(以进行依赖下拉)

您应该在表格下方编写Ajax。因此,请在jQuery装饰下的base.html或任何html文件(在其中声明jQuery的文件)中使用单独的块。

在声明了jQuery的base.html或.html文件中。

{% block extrajs %}
{% endblock  %}

然后在您的html文件中,{%endblock%}之后

{% block extrajs %}

    <script>
           $(document).ready(function()
           {
              $('#tableselect').change(function() {
              var url = "{% static url 'load-data' %}";
              var table_name = $(this).val();
              $.ajax({
                url : url,data : {
                  'table_name' = table_name
                },success : function(data){
                   $('#dataselect').html(data);
                }
               });
             });
           });
    </script>
    {% endblock  %}
本文链接:https://www.f2er.com/3146224.html

大家都在问