У меня есть модель Post в блоге, и один из ее атрибутов является категориальным атрибутом (store_type). Этот категориальный атрибут содержит 4 возможных значения: кафе, кофейня, десертное кафе и ресторан
Я хочу создать фильтр, чтобы я мог отображать сообщения в соответствии с типом магазина, связанного с этим сообщением, и я хочу, чтобы пользователь мог использовать раскрывающееся меню, а не осуществлять поиск по вводу в символьное поле. Вот моя модель.
Я уже сделал фильтр для заголовка, и он работает соответственно.
class Post(models.Model):
store_choices = [
('1', 'cafe'),
('2', 'dessert cafe'),
('3', 'coffee house'),
('4', 'restaurant')
]
title = models.CharField(max_length=100)
review = models.TextField(default='Paragraph 1', max_length=3000)
store_type = models.CharField(choices=store_choices, max_length=100)
В моем файле views.py я создал класс фильтра и передал список store_type в контекст, чтобы я мог ссылаться на эти значения в своем шаблоне.
def PostFilter(request):
qs = Post.objects.all()
store_type = [
('cafe'),
('dessert cafe'),
('coffee house'),
('restaurant')
]
title_query = request.GET.get('title')
store_type_query = request.GET.get('store_type')
if valid_query(title_query):
qs = qs.filter(title__icontains=title_query)
context = {
'queryset': qs,
'store_type': store_type
}
return render(request, 'blog/search.html', context)
Затем в моем HTML-шаблоне я пытаюсь сослаться на следующие категориальные значения:
<div class="container py-5">
<form method="GET" action=".">
<!-- Search by title -->
<div class="form-row d-block">
<div class="form-group col">
<label for="title">Store Name</label>
<div class="input-group">
<input class="form-control py-2 border-right-0 border" type="search" name="title" placeholder="Name contains..." />
<span class="input-group-append">
<div class="input-group-text bg-transparent">
<i class="fa fa-search"></i>
</div>
</span>
</div>
</div>
<!-- Search by store type-->
<div class="row">
<div class="form-group col-6">
<div class="container mt-4 mb-4">
<label for="storetype">Store Type</label>
<select class="form-control" name="store_type">
<option selected>Choose...</option>
{% for store in store_type %}
<option value="{{ store }}"> {{ store }} </option>
{% endfor %}
</select>
</div>
Опять же, мой метод фильтрации работает нормально, когда дело доходит до фильтрации по вводу символьного поля, но я не могу получить работающий фильтр, использующий метод выпадающего меню (опция выбора).