Skip to content

Commit 8ecfb67

Browse files
committed
🛠️ signals/filters.py -> Added NumberInFilter and id field to SignalFilter
🛠️ signals/forms.py -> Added id field to SignalFilterForm 🛠️ signals/views.py -> Added "id" to get_url_params method 🛠️ signals.html -> Added id field and filter-submit button 🛠️ signals_list.html -> Added checkbox for id and associated form handling
1 parent df4f7d0 commit 8ecfb67

File tree

5 files changed

+32
-12
lines changed

5 files changed

+32
-12
lines changed

src/signals/filters.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,27 @@
22

33
import django_filters
44
from django.db.models import Q
5-
from django_filters.filters import CharFilter, OrderingFilter
5+
from django_filters.filters import (
6+
BaseInFilter,
7+
CharFilter,
8+
NumberFilter,
9+
OrderingFilter,
10+
)
11+
from django_filters.widgets import QueryArrayWidget
612

713
from signals.models import Signal
814

915

16+
class NumberInFilter(BaseInFilter, NumberFilter):
17+
pass
18+
19+
1020
class SignalFilter(django_filters.FilterSet):
1121
"""
1222
FilterSet for the Signal model.
1323
"""
1424

25+
id = NumberInFilter(field_name='id', lookup_expr='in', widget=QueryArrayWidget)
1526
search = CharFilter(method='filter_search')
1627
order_by = OrderingFilter(
1728
fields=(
@@ -24,6 +35,7 @@ class SignalFilter(django_filters.FilterSet):
2435
class Meta:
2536
model = Signal
2637
fields: list[str] = [
38+
'id',
2739
'search',
2840
'pathogen',
2941
'active',

src/signals/forms.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,12 @@
99
TimeLabelChoices,
1010
)
1111

12-
MULTI_SELECT_TOOLTIP_MESSAGE = _('Hold down “Control”, or “Command” on a Mac, to select more than one.')
13-
1412

1513
class SignalFilterForm(forms.ModelForm):
1614
"""
1715
A form for filtering signals.
1816
"""
17+
id = forms.ModelMultipleChoiceField(queryset=Signal.objects.all(), widget=forms.MultipleHiddenInput)
1918
order_by = forms.ChoiceField(choices=[
2019
('', '---------'),
2120
('name', 'Name'),
@@ -34,6 +33,7 @@ class SignalFilterForm(forms.ModelForm):
3433
class Meta:
3534
model = Signal
3635
fields: list[str] = [
36+
'id',
3737
'order_by',
3838
'search',
3939
'pathogen',

src/signals/views.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ def get_queryset(self) -> Any:
3636

3737
def get_url_params(self):
3838
url_params_dict = {
39+
"id": self.request.GET.get("id"),
3940
"search": self.request.GET.get("search"),
4041
"pathogen": int(self.request.GET.get("pathogen"))
4142
if self.request.GET.get("pathogen")

src/templates/signals/signals.html

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ <h5 class="modal-title">Time Label</h5>
241241
</div>
242242
<div class="card-body">
243243
<div class="d-grid gap-2 mt-3">
244-
<button type="submit" class="btn btn-primary">{% trans 'Apply Filters' %}</button>
244+
<button id="filter-submit" type="submit" class="btn btn-primary">{% trans 'Apply Filters' %}</button>
245245
</div>
246246
</div>
247247
</div>
@@ -264,6 +264,7 @@ <h5 class="modal-title">Time Label</h5>
264264
<table class="table table-borderless table-hover">
265265
<thead>
266266
<tr>
267+
<th scope="col"></th>
267268
<th scope="col">Name</th>
268269
<th scope="col">Data Source</th>
269270
<th scope="col">Description</th>
@@ -282,9 +283,4 @@ <h5 class="modal-title">Time Label</h5>
282283
</div>
283284
</div>
284285
</form>
285-
<script>
286-
document.getElementById('id_order_by').addEventListener('change', function() {
287-
document.getElementById('filters-form').submit();
288-
});
289-
</script>
290286
{% endblock %}

src/templates/signals/signals_list.html

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
1+
{% load crispy_forms_tags %}
2+
13
{% for signal in signals %}
24
{% if forloop.last %}
35
<tr hx-trigger="revealed" class="clickable-table-row" hx-get="{% url 'signals' %}?page={{ page_obj.number|add:1 }}{{ url_params_str }}"
4-
hx-swap="afterend" onClick="location.href='{% url 'signal' pk=signal.id %}';">
6+
hx-swap="afterend">
57
{% else %}
6-
<tr classs="clickable-table-row" onClick="location.href='{% url 'signal' pk=signal.id %}';">
8+
<tr classs="clickable-table-row">
79
{% endif %}
8-
<td>{{ signal.display_name }}</td>
10+
<td>
11+
<input type="checkbox" name="id" value="{{ signal.id }}">
12+
{{ form.id|as_crispy_field }}
13+
</td>
14+
<td onClick="location.href='{% url 'signal' pk=signal.id %}';">{{ signal.display_name }}</td>
915
<td>{{ signal.source }}</td>
1016
<td>{{ signal.description }}</td>
1117
<td>
@@ -28,4 +34,9 @@
2834
{% endif %}
2935
</td>
3036
</tr>
37+
38+
<script>
39+
40+
</script>
41+
3142
{% endfor %}

0 commit comments

Comments
 (0)