Skip to content

Commit 98a556a

Browse files
committed
🔴 admin.py
🟢 0007_alter_signaltype_options_geographyunit.py 🛠️ models.py -> Added GeographyUnit model
1 parent 1b4a2fe commit 98a556a

File tree

3 files changed

+86
-0
lines changed

3 files changed

+86
-0
lines changed

src/signals/admin.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
from signals.models import (
77
Geography,
8+
GeographyUnit,
89
Pathogen,
910
Signal,
1011
SignalCategory,
@@ -22,6 +23,15 @@ class SignalCategoryAdmin(admin.ModelAdmin):
2223
search_fields: tuple[Literal['name']] = ('name',)
2324

2425

26+
@admin.register(GeographyUnit)
27+
class GeographyUnitAdmin(admin.ModelAdmin):
28+
"""
29+
Admin interface for managing geography unit objects.
30+
"""
31+
list_display: tuple[Literal['name']] = ('name', 'geo_id', 'geography',)
32+
search_fields: tuple[Literal['name']] = ('name', 'display_name', 'geo_id',)
33+
34+
2535
@admin.register(Geography)
2636
class GeographyAdmin(admin.ModelAdmin):
2737
"""
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Generated by Django 5.0.3 on 2024-05-02 12:12
2+
3+
import django.db.models.deletion
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('signals', '0006_merge_20240219_1508'),
11+
]
12+
13+
operations = [
14+
migrations.AlterModelOptions(
15+
name='signaltype',
16+
options={},
17+
),
18+
migrations.CreateModel(
19+
name='GeographyUnit',
20+
fields=[
21+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
22+
('created', models.DateTimeField(auto_now_add=True)),
23+
('modified', models.DateTimeField(auto_now=True)),
24+
('geo_id', models.CharField(help_text='Geo ID', max_length=128)),
25+
('name', models.CharField(help_text='Name', max_length=128)),
26+
('display_name', models.CharField(help_text='Display Name', max_length=128)),
27+
('postal', models.CharField(help_text='Postal', max_length=128, null=True)),
28+
('level', models.IntegerField(help_text='Level')),
29+
('geography', models.ForeignKey(help_text='Geography', on_delete=django.db.models.deletion.CASCADE, related_name='geography_units', to='signals.geography')),
30+
],
31+
options={
32+
'abstract': False,
33+
},
34+
),
35+
]

src/signals/models.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,47 @@ def __str__(self) -> str:
137137
return str(self.name)
138138

139139

140+
class GeographyUnit(TimeStampedModel):
141+
"""
142+
A model representing a geography (geo-level) unit.
143+
"""
144+
145+
geo_id: models.CharField = models.CharField(
146+
help_text=_('Geo ID'),
147+
max_length=128
148+
)
149+
name: models.CharField = models.CharField(
150+
help_text=_('Name'),
151+
max_length=128
152+
)
153+
display_name: models.CharField = models.CharField(
154+
help_text=_('Display Name'),
155+
max_length=128
156+
)
157+
postal: models.CharField = models.CharField(
158+
help_text=_('Postal'),
159+
max_length=128,
160+
null=True,
161+
)
162+
level: models.IntegerField = models.IntegerField(help_text=_('Level'))
163+
164+
geography: models.ForeignKey = models.ForeignKey(
165+
'signals.Geography',
166+
related_name='geography_units',
167+
help_text=_('Geography'),
168+
on_delete=models.CASCADE
169+
)
170+
171+
def __str__(self) -> str:
172+
"""
173+
Returns the name of the geography unit as a string.
174+
175+
:return: The name of the geography unit as a string.
176+
:rtype: str
177+
"""
178+
return str(self.name)
179+
180+
140181
class Signal(TimeStampedModel):
141182
"""
142183
A model representing a signal.

0 commit comments

Comments
 (0)