Skip to content

Commit 5450633

Browse files
committed
Add dataset type field + add filters to admin interface
1 parent 37b9d37 commit 5450633

File tree

8 files changed

+99
-7
lines changed

8 files changed

+99
-7
lines changed

vbos/datasets/admin.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,17 +32,20 @@ class RasterFileAdmin(admin.ModelAdmin):
3232

3333
@admin.register(RasterDataset)
3434
class RasterDatasetAdmin(admin.ModelAdmin):
35-
list_display = ["id", "cluster", "name", "created", "updated", "file"]
35+
list_display = ["id", "name", "cluster", "type", "updated", "file"]
36+
list_filter = ["cluster", "type"]
3637

3738

3839
@admin.register(VectorDataset)
3940
class VectorDatasetAdmin(admin.ModelAdmin):
40-
list_display = ["id", "cluster", "name", "created", "updated"]
41+
list_display = ["id", "name", "cluster", "type", "updated"]
42+
list_filter = ["cluster", "type"]
4143

4244

4345
@admin.register(VectorItem)
4446
class VectorItemAdmin(admin.GISModelAdmin):
4547
list_display = ["id", "dataset", "metadata"]
48+
list_filter = ["dataset"]
4649

4750
def get_urls(self):
4851
urls = super().get_urls()
@@ -117,12 +120,14 @@ def import_file(self, request):
117120

118121
@admin.register(TabularDataset)
119122
class TabularDatasetAdmin(admin.ModelAdmin):
120-
list_display = ["id", "cluster", "name", "created", "updated"]
123+
list_display = ["id", "name", "cluster", "type", "updated"]
124+
list_filter = ["cluster", "type"]
121125

122126

123127
@admin.register(TabularItem)
124128
class TabularItemAdmin(admin.GISModelAdmin):
125129
list_display = ["id", "dataset", "data"]
130+
list_filter = ["dataset"]
126131

127132
def get_urls(self):
128133
urls = super().get_urls()

vbos/datasets/filters.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
class DatasetFilter(FilterSet):
1414
name = CharFilter(field_name="name", lookup_expr="icontains")
1515
source = CharFilter(field_name="source", lookup_expr="icontains")
16+
type = CharFilter(field_name="type", lookup_expr="iexact")
1617
cluster = ModelChoiceFilter(
1718
field_name="cluster__name",
1819
to_field_name="name__iexact",
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# Generated by Django 5.2.5 on 2025-09-12 21:28
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("datasets", "0007_alter_rasterdataset_cluster_and_more"),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name="rasterdataset",
15+
name="type",
16+
field=models.CharField(
17+
choices=[
18+
("baseline", "Baseline"),
19+
("estimated_damage", "Estimated Damage"),
20+
(
21+
"aid_resources_needed",
22+
"Resources Needed to be Sent to Those Affected",
23+
),
24+
("estimate_financial_damage", "Estimate Financial Damage"),
25+
],
26+
default="baseline",
27+
max_length=55,
28+
),
29+
),
30+
migrations.AddField(
31+
model_name="tabulardataset",
32+
name="type",
33+
field=models.CharField(
34+
choices=[
35+
("baseline", "Baseline"),
36+
("estimated_damage", "Estimated Damage"),
37+
(
38+
"aid_resources_needed",
39+
"Resources Needed to be Sent to Those Affected",
40+
),
41+
("estimate_financial_damage", "Estimate Financial Damage"),
42+
],
43+
default="baseline",
44+
max_length=55,
45+
),
46+
),
47+
migrations.AddField(
48+
model_name="vectordataset",
49+
name="type",
50+
field=models.CharField(
51+
choices=[
52+
("baseline", "Baseline"),
53+
("estimated_damage", "Estimated Damage"),
54+
(
55+
"aid_resources_needed",
56+
"Resources Needed to be Sent to Those Affected",
57+
),
58+
("estimate_financial_damage", "Estimate Financial Damage"),
59+
],
60+
default="baseline",
61+
max_length=55,
62+
),
63+
),
64+
]

vbos/datasets/models.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
from django.contrib.gis.db import models
22
from django.conf import settings
3+
from django.utils.translation import gettext_lazy as _
34
from django.core.validators import FileExtensionValidator
45
from django.db.models.fields.files import default_storage
56
from django.db.models.signals import pre_delete
67
from django.dispatch import receiver
78

89
UPLOAD_TO = "staging/raster/" if settings.DEBUG else "production/raster/"
910

11+
TYPE_CHOICES = {
12+
"baseline": _("Baseline"),
13+
"estimated_damage": _("Estimated Damage"),
14+
"aid_resources_needed": _("Resources Needed to be Sent to Those Affected"),
15+
"estimate_financial_damage": _("Estimate Financial Damage"),
16+
}
1017

1118
class Cluster(models.Model):
1219
name = models.CharField(max_length=100, unique=True)
@@ -57,6 +64,7 @@ class RasterDataset(models.Model):
5764
Cluster,
5865
on_delete=models.PROTECT,
5966
)
67+
type = models.CharField(max_length=55, choices=TYPE_CHOICES, default="baseline")
6068
source = models.CharField(max_length=155, blank=True, null=True)
6169
file = models.ForeignKey(RasterFile, on_delete=models.PROTECT)
6270

@@ -75,6 +83,7 @@ class VectorDataset(models.Model):
7583
Cluster,
7684
on_delete=models.PROTECT,
7785
)
86+
type = models.CharField(max_length=55, choices=TYPE_CHOICES, default="baseline")
7887
source = models.CharField(max_length=155, blank=True, null=True)
7988

8089
def __str__(self):
@@ -104,6 +113,7 @@ class TabularDataset(models.Model):
104113
Cluster,
105114
on_delete=models.PROTECT,
106115
)
116+
type = models.CharField(max_length=55, choices=TYPE_CHOICES, default="baseline")
107117
source = models.CharField(max_length=155, blank=True, null=True)
108118

109119
def __str__(self):

vbos/datasets/serializers.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,15 @@ class RasterDatasetSerializer(serializers.ModelSerializer):
2323

2424
class Meta:
2525
model = RasterDataset
26-
fields = ["id", "name", "created", "updated", "cluster", "source", "file"]
26+
fields = ["id", "name", "created", "updated", "cluster", "type", "source", "file"]
2727

2828

2929
class VectorDatasetSerializer(serializers.ModelSerializer):
3030
cluster = serializers.ReadOnlyField(source="cluster.name")
3131

3232
class Meta:
3333
model = VectorDataset
34-
fields = ["id", "name", "created", "updated", "cluster", "source"]
34+
fields = ["id", "name", "created", "updated", "cluster", "type", "source"]
3535

3636

3737
class VectorItemSerializer(GeoFeatureModelSerializer):
@@ -61,7 +61,7 @@ class TabularDatasetSerializer(serializers.ModelSerializer):
6161

6262
class Meta:
6363
model = TabularDataset
64-
fields = ["id", "name", "created", "updated", "cluster", "source"]
64+
fields = ["id", "name", "created", "updated", "cluster", "type", "source"]
6565

6666

6767
class TabularItemSerializer(serializers.ModelSerializer):

vbos/datasets/test/test_raster_views.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ def setUp(self):
2424
file=self.r_2,
2525
source="OSM",
2626
cluster=Cluster.objects.create(name="Administrative"),
27+
type="estimated_damage",
2728
)
2829
self.url = reverse("datasets:raster-list")
2930

@@ -37,6 +38,8 @@ def test_raster_datasets_list(self):
3738
assert req.data.get("results")[1]["cluster"] == "Administrative"
3839
assert req.data.get("results")[0]["source"] == "WMO"
3940
assert req.data.get("results")[1]["source"] == "OSM"
41+
assert req.data.get("results")[0]["type"] == "baseline"
42+
assert req.data.get("results")[1]["type"] == "estimated_damage"
4043

4144
def test_raster_datasets_list_filter(self):
4245
req = self.client.get(self.url, {"cluster": "transportation"})
@@ -50,6 +53,10 @@ def test_raster_datasets_list_filter(self):
5053
assert req.status_code == status.HTTP_200_OK
5154
assert req.data.get("count") == 1
5255

56+
req = self.client.get(self.url, {"type": "baseline"})
57+
assert req.status_code == status.HTTP_200_OK
58+
assert req.data.get("count") == 1
59+
5360
def test_raster_datasets_detail(self):
5461
url = reverse("datasets:raster-detail", args=[self.dataset_1.id])
5562
req = self.client.get(url)

vbos/datasets/test/test_tabular_views.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ def setUp(self):
1818
name="Prices",
1919
cluster=Cluster.objects.create(name="Statistics"),
2020
source="Government",
21+
type="estimated_damage",
2122
)
2223
self.url = reverse("datasets:tabular-list")
2324

@@ -31,6 +32,8 @@ def test_tabular_datasets_list(self):
3132
assert req.data.get("results")[1]["source"] == "Government"
3233
assert req.data.get("results")[0]["cluster"] == "Administrative"
3334
assert req.data.get("results")[1]["cluster"] == "Statistics"
35+
assert req.data.get("results")[0]["type"] == "baseline"
36+
assert req.data.get("results")[1]["type"] == "estimated_damage"
3437

3538
def test_raster_datasets_list_filter(self):
3639
req = self.client.get(self.url, {"cluster": "transportation"})

vbos/datasets/test/test_vector_views.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def setUp(self):
1414
source="OSM",
1515
)
1616
self.dataset_2 = VectorDataset.objects.create(
17-
name="Roads", cluster=Cluster.objects.create(name="Transportation")
17+
name="Roads", cluster=Cluster.objects.create(name="Transportation"), type="estimated_damage"
1818
)
1919
self.url = reverse("datasets:vector-list")
2020

@@ -24,6 +24,8 @@ def test_vector_datasets_list(self):
2424
assert req.data.get("count") == 2
2525
assert req.data.get("results")[0]["name"] == "Boundaries"
2626
assert req.data.get("results")[1]["name"] == "Roads"
27+
assert req.data.get("results")[0]["type"] == "baseline"
28+
assert req.data.get("results")[1]["type"] == "estimated_damage"
2729

2830
def test_vector_datasets_list_filter(self):
2931
req = self.client.get(self.url, {"cluster": "transportation"})

0 commit comments

Comments
 (0)