Я пытался реализовать зависимые выпадающие списки в моих формах, но я не смог сделать это правильно, так как я мало что знаю о jquery, но думаю, что я делаю что-то не так. Если бы кто-то мог помочь мне, я был бы очень признателен. Проблема в том, что при выборе поля fl no, park_bay не обновляется снимок экрана
после сообщения, написанного Витором Фрейтасом, которое можно найти здесь ссылка
models.py приложения, называемого postlog:
from django.db import models
class flight(models.Model):
fl_no =models.CharField(max_length=6,primary_key=True)
inbound= models.CharField(max_length=15,blank=True)
dest= models.CharField(max_length=15,blank=True)
park_bay= models.CharField(max_length=3)
airline= models.CharField(max_length=15)
dep_time= models.TimeField()
arr_time= models.TimeField()
def __str__(self):
return self.fl_no
Таблица, приведенная ниже, относится к другому приложению.
models.py приложения, называемого status:
from django.db import models
from postlog.models import flight
# Create your models here.
class FlightStatus(models.Model):
Yes = 1
No = 2
CLEANING_CHOICES = (
(Yes, 'Yes'),
(No,'No'),
)
fl_no= models.ForeignKey(flight,on_delete=models.CASCADE,related_name='fli_no')
park_bay= models.ForeignKey(flight,on_delete=models.CASCADE,related_name='parki_bay')
catering= models.CharField(max_length=9)
fuel= models.IntegerField()
pas_cnt= models.IntegerField()
dest= models.ForeignKey(flight,on_delete=models.CASCADE,related_name='desti')
dep_time=models.ForeignKey(flight,on_delete=models.CASCADE,related_name='dept_time')
Cleaning = models.PositiveSmallIntegerField(choices=CLEANING_CHOICES)
def __str__(self):
return self.fl_no
views.py в приложении статуса:
from django.shortcuts import render,redirect
from django.views.generic.base import TemplateView
from status.forms import StatusForm
from status.models import FlightStatus
from postlog.models import flight
from django.views.generic import ListView, CreateView, UpdateView
from django.urls import reverse_lazy
# Create your views here.
class StatusPageView(CreateView):
template_name = "status/home.html"
model = FlightStatus
form_class = StatusForm
success_url = reverse_lazy('status')
def load_park_bay(request):
flight_id = request.GET.get('fl_no')
park = flight.objects.filter(flight_id=flight_id).order_by('park_bay')
return render(request, 'status/park_bay_dropdown.html', {'park':park})
urls.py в приложении статуса:
from django.urls import path,include
from . import views
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from status.views import StatusPageView
urlpatterns = [
path('', views.StatusPageView.as_view(), name='status'),
path('ajax/load-park/', views.load_park_bay, name='ajax_load_park'),
]
home.html:
{% extends 'base_template1.html' %}
{% load crispy_forms_tags %}
{% block content %}
<button type="button" class="butra button1ra" data-toggle="modal" data-target="#Add_Modal">Add Flight Status</button>
<!-- Adding a Flight Status -->
<div class="modal fade" id="Add_Modal" tabindex="-1" role="dialog" aria-labelledby="Add_ModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="AddModalLabel">Flight Details</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<form method="post">
{% csrf_token %}
{{ form|crispy }}
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Add Details</button>
</div>
</div>
</div>
</div>
<script>
$("#id_fl_no").change(function () {
var url = $("#StatusForm").attr("data-park-url");
var flnoId = $(this).val();
$.ajax({
url: url,
data: {
'fl_no': flnoId
},
success: function (data) {
$("#id_park_bay").html(data);
}
});
});
</script>
И park_bay_dropdown.html:
<option value="">---------</option>
{% for parks in park %}
<option value="{{ parks.pk }}">{{ parks.park_bay }}</option>
{% endfor %}
Я пытаюсь добиться того, чтобы при выборе значения fl no другие выпадающие списки должны отображать только атрибуты, связанные с номером fl.
ПредположимУ меня было две записи в моей таблице полетов. Допустим, EK565 и EK545. После выбора EK565 я хочу, чтобы в других раскрывающихся списках отображались значения, связанные с EK565.