Skip to content

Commit 0fb5060

Browse files
committed
🛠️ signals/filters.py -> Added an OrderingFilter for signal ordering
🛠️ signals/forms.py -> Added order_by field to SignalFilterForm 🛠️ signals/views.py -> Added a blank line 🛠️ templates/signals/signals.html -> Added form for filtering signals
1 parent 5b8997e commit 0fb5060

File tree

3 files changed

+33
-15
lines changed

3 files changed

+33
-15
lines changed

src/signals/filters.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import django_filters
44
from django.db.models import Q
5-
from django_filters.filters import CharFilter
5+
from django_filters.filters import CharFilter, OrderingFilter
66

77
from signals.models import Signal
88

@@ -13,6 +13,13 @@ class SignalFilter(django_filters.FilterSet):
1313
"""
1414

1515
search = CharFilter(method='filter_search')
16+
order_by = OrderingFilter(
17+
fields=(
18+
('name', 'ame'),
19+
('source__name', 'source'),
20+
('last_updated', 'last_updated'),
21+
)
22+
)
1623

1724
class Meta:
1825
model = Signal

src/signals/forms.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,14 @@ class SignalFilterForm(forms.ModelForm):
1616
"""
1717
A form for filtering signals.
1818
"""
19+
order_by = forms.ChoiceField(choices=[
20+
('', '---------'),
21+
('name', 'Name'),
22+
('source__name', 'Source'),
23+
('last_updated', 'Last Updated'),
24+
],
25+
required=False,
26+
)
1927
search = forms.CharField(min_length=3)
2028
pathogen = forms.ModelChoiceField(queryset=Pathogen.objects.all(), empty_label='---------')
2129
active = forms.NullBooleanField(initial=None)
@@ -26,6 +34,7 @@ class SignalFilterForm(forms.ModelForm):
2634
class Meta:
2735
model = Signal
2836
fields: list[str] = [
37+
'order_by',
2938
'search',
3039
'pathogen',
3140
'active',
@@ -38,6 +47,11 @@ class Meta:
3847
]
3948

4049
widgets = {
50+
'order_by': forms.Select(attrs={
51+
'class': 'form-select',
52+
'id': 'order_by',
53+
'aria-label': 'Order by',
54+
}),
4155
'search': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Enter search term'}),
4256
'pathogen': forms.Select(attrs={'class': 'form-select'}),
4357
'active': forms.NullBooleanSelect(attrs={'class': 'form-check mt-3', 'label': "Test <i class='ri-stack-line'></i>"},),

src/templates/signals/signals.html

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44
{% load crispy_forms_tags %}
55

66
{% block content %}
7+
<form method="GET" id="filters-form">
78
<div class="container-fluid">
89
<div class="row">
910
<div class="col-3">
1011
<div class="card">
11-
<form method="GET">
1212
<div class="form-group">
1313
<br />
1414
<div class="card-body">
@@ -269,26 +269,22 @@ <h5 class="modal-title">Time Label</h5>
269269
</div>
270270
</div>
271271
</div>
272-
</form>
273272
</div>
274273
</div>
275274
<div class="col-9">
276275
<div class="row margin-bottom-1rem">
277276
<div class="col-8 text-left-center">
278277
</div>
279278
<div class="col-4 no-padding">
280-
<form id="orderByForm">
281-
<div class="input-group">
282-
<label class="input-group-text" for="orderSelect">Sort By</label>
283-
<select class="form-select" id="orderSelect" name="orderBy" aria-label="Order By"
284-
onchange="document.getElementById('orderByForm').submit();">
285-
<option value="default" selected>Default</option>
286-
<option value="name">Name</option>
287-
<option value="date">Date</option>
288-
<option value="price">Price</option>
289-
</select>
279+
<div class="input-group mb-3">
280+
<label class="input-group-text form-label" for="id_order_by">Sort By</label>
281+
{{ form.order_by|as_crispy_field }}
290282
</div>
291-
</form>
283+
<script>
284+
document.getElementById('id_order_by').addEventListener('change', function() {
285+
document.getElementById('filters-form').submit();
286+
});
287+
</script>
292288
</div>
293289
</div>
294290
<div class="row">
@@ -314,4 +310,5 @@ <h5 class="modal-title">Time Label</h5>
314310
</div>
315311
</div>
316312
</div>
317-
{% endblock %}
313+
</form>
314+
{% endblock %}

0 commit comments

Comments
 (0)