Я пытаюсь создать надежный раскрывающийся список для Django, но поскольку мои знания JavaScript / ajax невелики, я достиг дна. Примечание: я прочитал предыдущие вопросы по этому поводу, но ни один из них не решил мою проблему полностью.
Описание проблемы:
Из-за моей базы данных size, я получаю частичные данные с сервера всякий раз, когда запрашивается представление. Это усложняет мою работу по использованию форм, поскольку я использую имя пользователя для фильтрации своего сервера. Вот упрощенная версия моего кода.
urls.py
urlpatterns = [
url(r'^SpecificVessel', views.SpecificVessel, name="goSpecificVessel"),
]
views.py
@login_required
def SpecificVessel(request):
#Get the username to filter the tables from SQL Server:
username = None
if request.user.is_authenticated:
username = request.user.username
#Get the shipnames.
cursor.execute("select distinct SHIPNAME from Table where [GROUP]=" + "'" + username + "'")
row = cursor.fetchall()
df_listofships = pd.DataFrame(data=row, columns=['SHIPNAME'])
shipnames = list(df_listofships['SHIPNAME'].tolist()) # LIST FOR SHIP SELECTION
#Get All the data from database.
cursor.execute("select * from Table2 where [GROUP]=" + "'" + username + "'")
row = cursor.fetchall()
df = pd.DataFrame(data=row)
colnames = list(dftrans.columns.values.tolist()) #LIST FOR YEAR DROPDOWN SELECTION
#getting the dropdown selections:
Dropdown_shipname = request.POST.get('Dropdown_shipname')
Dropdown = request.POST.getlist('Dropdown')
return render(request, 'SpecificVessel.html',
{'colnames': colnames, 'Dropdown': Dropdown, 'shipnames': shipnames, 'Dropdown_shipname': Dropdown_shipname,})
SpecificVessel. html
<form method="post">
{% csrf_token %}
<div class="form-group col-md-4">
<label for="Dropdown_shipname"><b>Select Vessel</b></label>
<select name="Dropdown_shipname" id="Dropdown_shipname" data-style="btn-default" class="selectpicker form-control" >
{% for i in shipnames %}
<option value="{{ i }}" {% if Dropdown_shipname == i %} selected {% endif %}>{{ i }} </option>
{% endfor %}
</select>
</div>
<div class="form-group col-md-4">
<label for="Dropdown"><b> Select Month </b></label>
<select name="Dropdown" id="Dropdown" data-style="btn-default" class="selectpicker form-control" multiple>
{% for i in colnames %}
<option value="{{ i }}" {% if Dropdown == i %} selected {% endif %} >{{ i }} </option>
{% endfor %}
</select>
</div>
<div class="form-group col-md-1 margin_top_25">
<input type="submit" value="Submit" />
</div>
</form>
В чем проблема?
Решение, которое я нашел в приведенном выше коде, предоставляет мне независимые выпадающие списки. То есть всякий раз, когда есть несоответствие, это выдает мне ошибку. Я пытался подойти к этому по-другому, однако после долгих исследований в Интернете я обнаружил, что javascript или ajax могут быть способом go по этому поводу. У меня такой вопрос: Есть ли способ получить то, что пользователь выбрал в Dropdown_shipname, прежде чем он отправит результаты? Если да, то как бы вы решили эту проблему?
Надеюсь, я был достаточно ясен. Пожалуйста, дайте мне знать, если я должен объяснить проблему лучше.