Ajax вызов из выпадающего, чтобы открыть новую страницу не работает - PullRequest
0 голосов
/ 11 ноября 2019

У меня есть форма, где есть 3 поля, и я хочу вставить их в базу данных. Моя таблица - это kitty_member, а поля - это код, слот и клиент. Код принадлежит первичному ключу таблицы котенка, имеющей поле «totalmembers». Как пользователь выбирает «код». я хочу показать список подстрекателей от 1 до «totalmembers» по отношению к «code». Например, когда totalmembers = 100 для code = 'K00001', должен отображаться выпадающий список от 1 до 100, а если code = 'k00002', у которого totalmembers = 50, то в раскрывающемся списке должно быть от 1 до 50. Итак, я написал один ajaxв поле «код». Я пытаюсь вызвать URL-адрес, передав параметр "код". Так что я могу вернуть "totalmembers", чтобы заполнить выпадающий список "Slots". Ниже приведен вызов Ajax, который находится в base.html.

<script>       
          function callsamepage()     {               

            var code1 = $('#code').val()
            console.log(code)
            $.ajax({     
              type:"POST",         
              url: "kitty_member1" ,
              data:{
                code: code1
               },
              success: function(result){
                console.log('correct',result)                
              }
            });            
          }     

Views.py

    def kitty_member1(request,code='None'):   
            url_name = request.resolver_match.url_name
            print(url_name)  
            print(code)      
            customers = customer.objects.all().distinct('mobile')     
            kittys = kitty.objects.all()  
            if code != 'None' :     
                kittys = kittys.filter(code=code)        
                for i in kittys:
                    totalmembers = i.totalmembers            
                members = []
                for j in range(totalmembers):
                    members.append(j)  
                print(members)
                ctx = {'customer': customers, 'kitty': kittys, 'member':members}
            else:
                ctx = {'customer': customers, 'kitty': kittys}

Urls.py

    urlpatterns = [
        path('',views.index,name='index'),
        path('kitty_member',views.kitty_member_save,name='kitty_member'),
        path('kitty_member1/', views.kitty_member1, name='kitty_member1'),
        path('kitty_member1/<code>', views.kitty_member1, name='kitty_member1')]

template

    {% extends 'base.html' %}
    {% load static %}

    {% block content %}

    <div class="container">
      <div class='row'>
        <div class="col-lg-12 col-xs-12">
          <div class="customer">
            <form name='myform' class="form-signin" action="" method="POST">
              {% csrf_token %}
              <h1 class="h3 mb-3 font-weight-normal redc">Kitty Slots Allocation to Customer</h1>

              <div class="mb-3">

                <select class="custom-select center-block" name="code" id="code" required onchange="callsamepage()">  
                  <option value="">Select Kitty</option>            
                  {% for i in kitty %}
                  <option value="{{ i.code }}" > {{ i.code|add:' - '|add:i.name }} </option>
                  {% endfor %}
                </select>
                <div class="invalid-feedback">
                  Please select a valid Existing Customer.
                </div>
              </div>  

              <div class="mb-3">                        
                  <select class="custom-select center-block" name="slot" id="slot" required >                           
                        {% for j in member %}
                           <option value="{{ j }}" > {{ j }} </option>
                        {% endfor %}                 
                  </select>
                  <div class="invalid-feedback">
                    Please select a valid Slot.
                  </div>
              </div>  


              <div class="mb-3">            
                <select class="custom-select center-block" name="customer" id="customer" required>    
                  <option value=""> Select Customer </option>          
                  {% for i in customer %}
                  <option value="{{ i.mobile }}"> {{ i.mobile|add:' - '|add:i.name }} </option>
                  {% endfor %}
                </select>
                <div class="invalid-feedback">
                  Please select a valid Existing Customer.
                </div>
              </div>                       

              <div style="padding-top: 20px;">
                {% if request.resolver_match.url_name == 'kitty_member' %}
                <button class="btn btn-md btn-primary" type="submit" data-toggle="modal"
                  data-target="#exampleModalCenter">Save</button>
                {% endif %}
              </div>

            </form>
          </div>
        </div>
      </div>
    </div>
    {% endblock %}

Я не могу заполнитьПоле «Слот».

1 Ответ

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

Вы можете написать код API, как это в views.py:

from django.http import JsonResponse

def code_api(request):
    code = request.GET.get('code', None)
    kitty_obj = kitty.objects.filter(code=code).first()
    total_me = mbers = 0
    if kitty_obj:
        total_members = kitty_obj.totalmembers
    return JsonResponse({"total_members": total_members})

и добавить URL в urls.py, как это

path('kitty_member1/code_api/', views.code_api, name='code_api'),

и добавить jquery в шаблон

$(document).ready(function(){
    $('#code').on('change', function() {
      $('#slot').children().remove();
      var code = this.value;
      $.get("{% url 'code_api'%}?code="+code, function(data, status){
        var total_members = data['total_members'];
        for(int i=1;i<=parseInt(total_members);i++){
            $("#slot").append("<option value='"+i+"'>"+i+"</option>'");
        }
      });
    });
});
...