Изменить функцию + ajax не может отправить параметр значения из поля выбора в представления django (чтобы сделать зависимый выпадающий список) - PullRequest
0 голосов
/ 07 ноября 2019

Итак, у меня есть 2 поля выбора, первое поле выбора содержит список схем, которые есть в базе данных (я использую оракул в DBEAVER), поэтому каталог выглядит так:

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 иимя_таблицы, в которую мы вставляем данные вручную, зависит от списка схем, и мы помещаем приращение идентификатора таблицы

PS: имя_таблицы - это схема (мои друзья называют ее таблицей, прошу прощения за нее)

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 #toload значение параметра, если ajax success

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

что-то не так? когда я выбираю выбор, он не отправляет какой-либо параметр, похожий на HTML без функции просмотра.

может быть, кто-то может исправить здесь код, или что я пропускаю, спасибо

1 Ответ

0 голосов
/ 07 ноября 2019

Вы должны написать свой Ajax ниже формы. Поэтому возьмите отдельный блок в base.html или любом html-файле (где вы объявили jQuery) под украшением jQuery.

В файле base.html или .html, в котором вы объявили свой jQuery.

{% 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  %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...