Как сделать поиск по нескольким категориям?
Делал поиск по нескольким категориям. И вроде показалось, что сделал, но на деле ищет только по одной категории, если выбрать несколько. то всегда ищет по последней в списке. А как сделать, чтобы поиск был по нескольким? views:
def get_context_data(self, *, object_list=None, **kwargs):
queryset = object_list if object_list is not None else self.object_list
category_form = CategorySearchForm(self.request.GET)
if category_form.is_valid():
categorys = category_form.cleaned_data.get('category', '')
if categorys:
queryset = queryset.filter(category=categorys)
form = ExpenseSearchForm(self.request.GET)
if form.is_valid():
name = form.cleaned_data.get('name', '').strip()
if name:
queryset = queryset.filter(name__icontains=name)
return super().get_context_data(
total_sum=Expense.objects.aggregate(Sum('amount')).get('amount__sum'),
sum_per_month=Expense.objects.annotate(month=TruncMonth('date')).values('month').annotate(total_amount=Sum('amount')).order_by('month').reverse()[0].get('total_amount'),
sum_per_year=Expense.objects.annotate(year=TruncYear('date')).values('year').annotate(total_amount=Sum('amount')).order_by('year').reverse()[0].get('total_amount'),
form=form,
object_list=queryset,
summary_per_category=summary_per_category(queryset),
**kwargs)
forms:
class CategorySearchForm(forms.ModelForm):
class Meta:
model = Expense
fields = ('category',)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['category'].required = False
templates:
<form method="get" action="">
<table border="1">
<tbody>
<h3>Category:</h3>
{% for category in view.get_category %}
<tr>
<td>
<input type="checkbox" name="category" value="{{ category.id }}">
<span>{{ category.name }}</span>
</td>
</tr>
{% endfor %}
</tbody>
</table>
<button type="submit">Search</button>
</form>
