У меня есть поле поиска, где у меня есть 5 выпадающих меню, которые помогут мне отфильтровать результаты поиска.В моей базе данных (MySQL) у меня есть одна модель Equip с 21 столбцом, которая является единственной моделью, используемой в параметрах поиска.Мне нужно только использовать 5 из 21 столбца, чтобы получить необходимые результаты, это: eqtype, eqmfg, eqeff, eqmfgmodeldescrip и eqconfig.
Первый выпадающий список - это фильтр по eqtype, а второй - фильтр по eqmfgтретий - eqeff, четвертый - eqmfgmodeldescrip, пятый - eqconfig.Как я уже написал, они возвращают все опции для своих уважаемых полей.Тем не менее, я пытаюсь установить второй раскрывающийся список динамически, что означает, что в зависимости от первого раскрывающегося списка (eqtype) во втором раскрывающемся списке должны отображаться только те eqmfg, которые соответствуют соответствующему выбранному типу eqtype.Третий будет основан на первом и втором выборе.Четвертый будет основан на первом, втором и третьем выборе.Пятый будет основан на первом, втором, третьем и четвертом выборе.
Я пробовал несколько учебных пособий, которые работают с более чем одной моделью, однако мне не удалось заставить его работать столько одна модель.
Спасибо за помощь!
Мой код для выпадающего списка следующий:
model.py
class Equip(models.Model):
eqtype = models.CharField(max_length=45, blank=True, verbose_name="Type:")
eqmfg = models.CharField(max_length=45, blank=True, verbose_name="Mfg:")
eqconfig = models.CharField(max_length=45, blank=True, verbose_name="Config.:")
eqeff = models.CharField(max_length=45, blank=True, verbose_name="Efficiency:")
eqmfgmodeldescrip = models.CharField(max_length=445, blank=True, verbose_name="Mfg. Model Descrip.:")
def get_absolute_url(self):
return f"/login/equip_detail/{self.id}/"
Views.py
def search2(request):
queryset = Equip.objects.all()
search_term = ''
count = ''
search1 = ''
if 'search1' in request.GET:
search_term = request.GET['search1']
queryset = queryset.filter(Q(eqmodel__icontains=search_term)
| Q(eqmfg__icontains=search_term)
| Q(eqtype__icontains=search_term)
| Q(eqconfig__icontains=search_term)
| Q(eqmfgmodeldescrip__icontains=search_term)
| Q(eqmtrtype__icontains=search_term)
| Q(eqeff__icontains=search_term)
| Q(eqbtu__icontains=search_term)
| Q(eqprice__icontains=search_term))
count = queryset.filter(Q(eqmodel__icontains=search_term)
| Q(eqmfg__icontains=search_term)
| Q(eqtype__icontains=search_term)
| Q(eqconfig__icontains=search_term)
| Q(eqmfgmodeldescrip__icontains=search_term)
| Q(eqmtrtype__icontains=search_term)
| Q(eqeff__icontains=search_term)
| Q(eqbtu__icontains=search_term)
| Q(eqprice__icontains=search_term)).count()
type1 = Equip.objects.order_by('eqtype').values('eqtype').distinct().exclude(eqtype='None')
if 'search2' in request.GET:
search_term = request.GET['search2']
queryset = queryset.filter(Q(eqmodel__icontains=search_term)
| Q(eqmfg__icontains=search_term)
| Q(eqtype__icontains=search_term)
| Q(eqconfig__icontains=search_term)
| Q(eqmfgmodeldescrip__icontains=search_term)
| Q(eqmtrtype__icontains=search_term)
| Q(eqeff__icontains=search_term)
| Q(eqbtu__icontains=search_term)
| Q(eqprice__icontains=search_term))
count = queryset.filter(Q(eqmodel__icontains=search_term)
| Q(eqmfg__icontains=search_term)
| Q(eqtype__icontains=search_term)
| Q(eqconfig__icontains=search_term)
| Q(eqmfgmodeldescrip__icontains=search_term)
| Q(eqmtrtype__icontains=search_term)
| Q(eqeff__icontains=search_term)
| Q(eqbtu__icontains=search_term)
| Q(eqprice__icontains=search_term)).count()
mfg1 = Equip.objects.order_by('eqmfg').values('eqmfg').distinct().exclude(eqmfg='None')
if 'search3' in request.GET:
search_term = request.GET['search3']
queryset = queryset.filter(Q(eqmodel__icontains=search_term)
| Q(eqmfg__icontains=search_term)
| Q(eqtype__icontains=search_term)
| Q(eqconfig__icontains=search_term)
| Q(eqmfgmodeldescrip__icontains=search_term)
| Q(eqmtrtype__icontains=search_term)
| Q(eqeff__icontains=search_term)
| Q(eqbtu__icontains=search_term)
| Q(eqprice__icontains=search_term))
count = queryset.filter(Q(eqmodel__icontains=search_term)
| Q(eqmfg__icontains=search_term)
| Q(eqtype__icontains=search_term)
| Q(eqconfig__icontains=search_term)
| Q(eqmfgmodeldescrip__icontains=search_term)
| Q(eqmtrtype__icontains=search_term)
| Q(eqeff__icontains=search_term)
| Q(eqbtu__icontains=search_term)
| Q(eqprice__icontains=search_term)).count()
eff1 = Equip.objects.order_by('eqeff').values('eqeff').distinct().exclude(eqeff='None')
if 'search4' in request.GET:
search_term = request.GET['search4']
queryset = queryset.filter(Q(eqmodel__icontains=search_term)
| Q(eqmfg__icontains=search_term)
| Q(eqtype__icontains=search_term)
| Q(eqconfig__icontains=search_term)
| Q(eqmfgmodeldescrip__icontains=search_term)
| Q(eqmtrtype__icontains=search_term)
| Q(eqeff__icontains=search_term)
| Q(eqbtu__icontains=search_term)
| Q(eqprice__icontains=search_term))
count = queryset.filter(Q(eqmodel__icontains=search_term)
| Q(eqmfg__icontains=search_term)
| Q(eqtype__icontains=search_term)
| Q(eqconfig__icontains=search_term)
| Q(eqmfgmodeldescrip__icontains=search_term)
| Q(eqmtrtype__icontains=search_term)
| Q(eqeff__icontains=search_term)
| Q(eqbtu__icontains=search_term)
| Q(eqprice__icontains=search_term)).count()
moddescrip1= Equip.objects.order_by('eqmfgmodeldescrip').values('eqmfgmodeldescrip').distinct()
if 'search5' in request.GET:
search_term = request.GET['search5']
queryset = queryset.filter(Q(eqmodel__icontains=search_term)
| Q(eqmfg__icontains=search_term)
| Q(eqtype__icontains=search_term)
| Q(eqconfig__icontains=search_term)
| Q(eqmfgmodeldescrip__icontains=search_term)
| Q(eqmtrtype__icontains=search_term)
| Q(eqeff__icontains=search_term)
| Q(eqbtu__icontains=search_term)
| Q(eqprice__icontains=search_term))
count = queryset.filter(Q(eqmodel__icontains=search_term)
| Q(eqmfg__icontains=search_term)
| Q(eqtype__icontains=search_term)
| Q(eqconfig__icontains=search_term)
| Q(eqmfgmodeldescrip__icontains=search_term)
| Q(eqmtrtype__icontains=search_term)
| Q(eqeff__icontains=search_term)
| Q(eqbtu__icontains=search_term)
| Q(eqprice__icontains=search_term)).count()
config1 = Equip.objects.order_by('eqconfig').values('eqconfig').distinct().exclude(eqconfig='None')
context = {"object_list1": queryset,
"search_term": search_term,
"count": count,
"queryset1": queryset,
"search1": search1,
"type1": type1,
"mfg1": mfg1,
"eff1": eff1,
"moddescrip1": moddescrip1,
"config1": config1,
}
return render(request, 'login/search2.html', context)
search2 HTML:
<div class="s008">
<form>
<div class="inner-form">
<div class="advance-search">
<span class="desc">Search</span>
<div class="row">
<div class="input-field">
<div class="input-select">
<select data-trigger="" name="search1" id="eqtype" onchange="return showfields();">
<option placeholder="" value="{{ type2.eqtype }}">EQUIPMENT TYPE</option>
{% for type1 in type1 %}
<option value="{{ type1.eqtype }}">{{ type1.eqtype }}</option>
{% endfor %}
</select>
</div>
</div>
<div id="Man" class="input-field" style="visibility: hidden;">
<div class="input-select">
<select data-trigger="" name="search2" id="eqmfg" onchange="return Eff.style.visibility = 'visible'">
<option placeholder="" value="{{ type3.eqmfg }}">MANUFACTURER</option>
{% for mfg1 in mfg1 %}
<option value="{{ mfg1.eqmfg }}">{{ mfg1.eqmfg }}</option>
{% endfor %}
</select>
</div>
</div>
<div id="Eff" class="input-field" style="visibility: hidden;">
<div class="input-select">
<select data-trigger="" name="search3" id="eqeff" onchange="return Mod.style.visibility = 'visible'">
<option placeholder="" value="{{ type4.eqeff }}">EFFICIENCY</option>
{% for eff1 in eff1 %}
<option value="{{ eff1.eqeff }}">{{ eff1.eqeff }}</option>
{% endfor %}
</select>
</div>
</div>
</div>
<div class="row second">
<div id="Mod" class="input-field" style="visibility: hidden;">
<div class="input-select">
<select data-trigger="" name="search4" id="eqmfgmodeldescrip" onchange="return Config.style.visibility = 'visible'">
<option placeholder="" value="{{ type5.eqmfgmodeldescrip }}">MODEL DESCRIPTION</option>
{% for moddescrip1 in moddescrip1 %}
<option value="{{ moddescrip1.eqmfgmodeldescrip }}">{{ moddescrip1.eqmfgmodeldescrip }}</option>
{% endfor %}
</select>
</div>
</div>
<div id="Config" class="input-field" style="visibility: hidden;">
<div class="input-select">
<select data-trigger="" name="search5"id="eqconfig">
<option placeholder="" value="">CONFIGURATION</option>
{% for config1 in config1 %}
<option value="{{ config1.eqconfig }}">{{ config1.eqconfig }}</option>
{% endfor %}
</select>
</div>
</div>
</div>
<div class="row third">
<div class="input-field">
<div class="result-count">
<p> results : <span>{{ count }}</span></p>
</div>
<div id="Button" class="group-btn" style="visibility: hidden;">
<a class="btn-delete" href="/login/search2">Reset</a>
<button class="btn-search">Search</button>
</div>
</div>
</div>
</div>
</div>
</form>
</div>