Skip to content

Commit 760a4ad

Browse files
committed
Added new Severity Pyramid Rungs to the Signal Set filters
1 parent 55e8274 commit 760a4ad

File tree

9 files changed

+264
-87
lines changed

9 files changed

+264
-87
lines changed
Lines changed: 186 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,189 @@
11
[
2-
{
3-
"model": "signals.severitypyramidrung",
4-
"pk": 73,
5-
"fields": {
6-
"created": "2024-08-15T09:57:05.874Z",
7-
"modified": "2024-08-15T13:08:28.334Z",
8-
"name": "outpatient visit",
9-
"display_name": "Outpatient / ED"
2+
{
3+
"model": "signals.severitypyramidrung",
4+
"pk": 73,
5+
"fields": {
6+
"created": "2024-08-15T09:57:05.874Z",
7+
"modified": "2024-08-15T13:08:28.334Z",
8+
"name": "outpatient visit",
9+
"display_name": "Outpatient / ED",
10+
"used_in": "signals"
11+
}
12+
},
13+
{
14+
"model": "signals.severitypyramidrung",
15+
"pk": 74,
16+
"fields": {
17+
"created": "2024-08-15T09:57:06.623Z",
18+
"modified": "2024-08-15T13:08:20.357Z",
19+
"name": "infected",
20+
"display_name": "Infected",
21+
"used_in": "signals"
22+
}
23+
},
24+
{
25+
"model": "signals.severitypyramidrung",
26+
"pk": 75,
27+
"fields": {
28+
"created": "2024-08-15T09:57:06.742Z",
29+
"modified": "2024-08-15T13:08:14.615Z",
30+
"name": "population",
31+
"display_name": "Population",
32+
"used_in": "signals"
33+
}
34+
},
35+
{
36+
"model": "signals.severitypyramidrung",
37+
"pk": 76,
38+
"fields": {
39+
"created": "2024-08-15T09:57:07.184Z",
40+
"modified": "2024-08-15T13:08:07.134Z",
41+
"name": "hospitalized",
42+
"display_name": "Hospitalized",
43+
"used_in": "signals"
44+
}
45+
},
46+
{
47+
"model": "signals.severitypyramidrung",
48+
"pk": 77,
49+
"fields": {
50+
"created": "2024-08-15T09:57:07.541Z",
51+
"modified": "2024-08-15T13:07:59.789Z",
52+
"name": "symptomatic",
53+
"display_name": "Symptomatic",
54+
"used_in": "signals"
55+
}
56+
},
57+
{
58+
"model": "signals.severitypyramidrung",
59+
"pk": 78,
60+
"fields": {
61+
"created": "2024-08-15T09:57:16.477Z",
62+
"modified": "2024-08-15T13:07:54.021Z",
63+
"name": "ascertained (case)",
64+
"display_name": "Ascertained (case)",
65+
"used_in": "signals"
66+
}
67+
},
68+
{
69+
"model": "signals.severitypyramidrung",
70+
"pk": 79,
71+
"fields": {
72+
"created": "2024-08-15T09:57:49.327Z",
73+
"modified": "2024-08-15T13:07:46.136Z",
74+
"name": "dead",
75+
"display_name": "Dead",
76+
"used_in": "signals"
77+
}
78+
},
79+
{
80+
"model": "signals.severitypyramidrung",
81+
"pk": 80,
82+
"fields": {
83+
"created": "2024-08-15T09:57:49.327Z",
84+
"modified": "2024-08-15T13:07:46.136Z",
85+
"name": "Population",
86+
"display_name": "Population",
87+
"used_in": "signal_sets"
88+
}
89+
},
90+
{
91+
"model": "signals.severitypyramidrung",
92+
"pk": 81,
93+
"fields": {
94+
"created": "2024-08-15T09:57:49.327Z",
95+
"modified": "2024-08-15T13:07:46.136Z",
96+
"name": "Vaccinated",
97+
"display_name": "Vaccinated",
98+
"used_in": "signal_sets"
99+
}
100+
},
101+
{
102+
"model": "signals.severitypyramidrung",
103+
"pk": 82,
104+
"fields": {
105+
"created": "2024-08-15T09:57:49.327Z",
106+
"modified": "2024-08-15T13:07:46.136Z",
107+
"name": "Infected",
108+
"display_name": "Infected",
109+
"used_in": "signal_sets"
110+
}
111+
},
112+
{
113+
"model": "signals.severitypyramidrung",
114+
"pk": 83,
115+
"fields": {
116+
"created": "2024-08-15T09:57:49.327Z",
117+
"modified": "2024-08-15T13:07:46.136Z",
118+
"name": "Tested",
119+
"display_name": "Tested",
120+
"used_in": "signal_sets"
121+
}
122+
},
123+
{
124+
"model": "signals.severitypyramidrung",
125+
"pk": 84,
126+
"fields": {
127+
"created": "2024-08-15T09:57:49.327Z",
128+
"modified": "2024-08-15T13:07:46.136Z",
129+
"name": "Case",
130+
"display_name": "Case",
131+
"used_in": "signal_sets"
132+
}
133+
},
134+
{
135+
"model": "signals.severitypyramidrung",
136+
"pk": 85,
137+
"fields": {
138+
"created": "2024-08-15T09:57:49.327Z",
139+
"modified": "2024-08-15T13:07:46.136Z",
140+
"name": "Symptomatic",
141+
"display_name": "Symptomatic",
142+
"used_in": "signal_sets"
143+
}
144+
},
145+
{
146+
"model": "signals.severitypyramidrung",
147+
"pk": 86,
148+
"fields": {
149+
"created": "2024-08-15T09:57:49.327Z",
150+
"modified": "2024-08-15T13:07:46.136Z",
151+
"name": "Outpatient / ED",
152+
"display_name": "Outpatient / ED",
153+
"used_in": "signal_sets"
154+
}
155+
},
156+
{
157+
"model": "signals.severitypyramidrung",
158+
"pk": 87,
159+
"fields": {
160+
"created": "2024-08-15T09:57:49.327Z",
161+
"modified": "2024-08-15T13:07:46.136Z",
162+
"name": "Hospitalized",
163+
"display_name": "Hospitalized",
164+
"used_in": "signal_sets"
165+
}
166+
},
167+
{
168+
"model": "signals.severitypyramidrung",
169+
"pk": 88,
170+
"fields": {
171+
"created": "2024-08-15T09:57:49.327Z",
172+
"modified": "2024-08-15T13:07:46.136Z",
173+
"name": "ICU",
174+
"display_name": "ICU",
175+
"used_in": "signal_sets"
176+
}
177+
},
178+
{
179+
"model": "signals.severitypyramidrung",
180+
"pk": 89,
181+
"fields": {
182+
"created": "2024-08-15T09:57:49.327Z",
183+
"modified": "2024-08-15T13:07:46.136Z",
184+
"name": "Deceased",
185+
"display_name": "Deceased",
186+
"used_in": "signal_sets"
187+
}
10188
}
11-
},
12-
{
13-
"model": "signals.severitypyramidrung",
14-
"pk": 74,
15-
"fields": {
16-
"created": "2024-08-15T09:57:06.623Z",
17-
"modified": "2024-08-15T13:08:20.357Z",
18-
"name": "infected",
19-
"display_name": "Infected"
20-
}
21-
},
22-
{
23-
"model": "signals.severitypyramidrung",
24-
"pk": 75,
25-
"fields": {
26-
"created": "2024-08-15T09:57:06.742Z",
27-
"modified": "2024-08-15T13:08:14.615Z",
28-
"name": "population",
29-
"display_name": "Population"
30-
}
31-
},
32-
{
33-
"model": "signals.severitypyramidrung",
34-
"pk": 76,
35-
"fields": {
36-
"created": "2024-08-15T09:57:07.184Z",
37-
"modified": "2024-08-15T13:08:07.134Z",
38-
"name": "hospitalized",
39-
"display_name": "Hospitalized"
40-
}
41-
},
42-
{
43-
"model": "signals.severitypyramidrung",
44-
"pk": 77,
45-
"fields": {
46-
"created": "2024-08-15T09:57:07.541Z",
47-
"modified": "2024-08-15T13:07:59.789Z",
48-
"name": "symptomatic",
49-
"display_name": "Symptomatic"
50-
}
51-
},
52-
{
53-
"model": "signals.severitypyramidrung",
54-
"pk": 78,
55-
"fields": {
56-
"created": "2024-08-15T09:57:16.477Z",
57-
"modified": "2024-08-15T13:07:54.021Z",
58-
"name": "ascertained (case)",
59-
"display_name": "Ascertained (case)"
60-
}
61-
},
62-
{
63-
"model": "signals.severitypyramidrung",
64-
"pk": 79,
65-
"fields": {
66-
"created": "2024-08-15T09:57:49.327Z",
67-
"modified": "2024-08-15T13:07:46.136Z",
68-
"name": "dead",
69-
"display_name": "Dead"
70-
}
71-
}
72189
]

src/signal_sets/filters.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,10 @@ class SignalSetFilter(django_filters.FilterSet):
4141

4242
severity_pyramid_rungs = django_filters.ModelMultipleChoiceFilter(
4343
field_name="severity_pyramid_rungs",
44-
queryset=SeverityPyramidRung.objects.filter(id__in=SignalSet.objects.values_list("severity_pyramid_rungs", flat="True")),
44+
queryset=SeverityPyramidRung.objects.filter(
45+
# id__in=SignalSet.objects.values_list("severity_pyramid_rungs", flat="True")
46+
used_in="signal_sets"
47+
),
4548
widget=QueryArrayWidget,
4649
)
4750

src/signal_sets/forms.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ class SignalSetFilterForm(forms.ModelForm):
3333

3434
severity_pyramid_rungs = forms.ModelChoiceField(
3535
queryset=SeverityPyramidRung.objects.filter(
36-
id__in=SignalSet.objects.values_list("severity_pyramid_rungs", flat="True")
36+
# id__in=SignalSet.objects.values_list("severity_pyramid_rungs", flat="True")
37+
used_in="signal_sets"
3738
),
3839
widget=forms.CheckboxSelectMultiple(),
3940
)

src/signal_sets/resources.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,9 @@ def process_severity_pyramid_rungs(row) -> None:
4343
for severity_pyramid_rung in severity_pyramid_rungs:
4444
severity_pyramid_rung = severity_pyramid_rung.strip()
4545
severity_pyramid_rung_obj, _ = SeverityPyramidRung.objects.get_or_create(
46-
name=severity_pyramid_rung
46+
name=severity_pyramid_rung,
47+
used_in="signal_sets",
48+
defaults={"used_in": "signal_sets", "display_name": severity_pyramid_rung}
4749
)
4850

4951

@@ -227,7 +229,8 @@ def after_import_row(self, row, row_result, **kwargs):
227229
signal_set_obj.pathogens.add(pathogen)
228230
for severity_pyramid_rung in row["Severity Pyramid Rung(s)"].split(","):
229231
severity_pyramid_rung = SeverityPyramidRung.objects.filter(
230-
name=severity_pyramid_rung
232+
name=severity_pyramid_rung,
233+
used_in="signal_sets"
231234
).first()
232235
signal_set_obj.severity_pyramid_rungs.add(severity_pyramid_rung)
233236

src/signals/admin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ class SeverityPyramidRungAdmin(admin.ModelAdmin):
6969
"""
7070
Admin interface for managing severity pyramid objects.
7171
"""
72-
list_display: tuple[Literal['name'], Literal['display_name']] = ('name', 'display_name')
72+
list_display: tuple[Literal['name'], Literal['display_name']] = ('name', 'display_name', 'used_in',)
7373
search_fields: tuple[Literal['name']] = ('name',)
7474

7575

src/signals/forms.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,10 @@ class SignalFilterForm(forms.ModelForm):
4646
)
4747

4848
severity_pyramid_rung = forms.ModelChoiceField(
49-
queryset=SeverityPyramidRung.objects.filter(id__in=Signal.objects.values_list("severity_pyramid_rung", flat=True)),
49+
queryset=SeverityPyramidRung.objects.filter(
50+
# id__in=Signal.objects.values_list("severity_pyramid_rung", flat=True)
51+
used_in="signals"
52+
),
5053
widget=forms.CheckboxSelectMultiple(),
5154
)
5255

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Generated by Django 5.0.7 on 2025-01-20 14:57
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('signals', '0014_geography_used_in_alter_geography_name_and_more'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='severitypyramidrung',
15+
name='used_in',
16+
field=models.CharField(choices=[('signals', 'Signals'), ('signal_sets', 'Signal Sets')], default='signals', max_length=11),
17+
),
18+
migrations.AlterField(
19+
model_name='severitypyramidrung',
20+
name='name',
21+
field=models.CharField(help_text='Name of the severity pyramid rung.', max_length=255, verbose_name='name'),
22+
),
23+
migrations.AlterUniqueTogether(
24+
name='severitypyramidrung',
25+
unique_together={('name', 'used_in')},
26+
),
27+
]

src/signals/models.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ class SeverityPyramidRung(TimeStampedModel):
6464

6565
name: models.CharField = models.CharField(
6666
max_length=255,
67-
unique=True,
6867
verbose_name=_("name"),
6968
help_text=_("Name of the severity pyramid rung."),
7069
)
@@ -76,8 +75,15 @@ class SeverityPyramidRung(TimeStampedModel):
7675
blank=True,
7776
)
7877

78+
used_in: models.CharField = models.CharField(
79+
max_length=11,
80+
choices=USED_IN_CHOICES,
81+
default="signals",
82+
)
83+
7984
class Meta:
8085
verbose_name_plural: str = "Severity Pyramid Rungs"
86+
unique_together: list[str] = ["name", "used_in"]
8187

8288
def __str__(self) -> str:
8389
return str(self.display_name) if self.display_name else str(self.name)

0 commit comments

Comments
 (0)