Skip to content

Commit d7edba9

Browse files
committed
feat(eap): update schema on updating eap file instance
- update image field names on simplifiedeap
1 parent 9e35ceb commit d7edba9

5 files changed

Lines changed: 95 additions & 24 deletions

File tree

eap/admin.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,9 @@ class SimplifiedEAPAdmin(admin.ModelAdmin):
6464
)
6565
readonly_fields = (
6666
"cover_image",
67-
"hazard_impact_file",
68-
"risk_selected_protocols_file",
69-
"selected_early_actions_file",
67+
"hazard_impact_images",
68+
"risk_selected_protocols_images",
69+
"selected_early_actions_images",
7070
"planned_operations",
7171
"enable_approaches",
7272
"parent",
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# Generated by Django 4.2.19 on 2025-11-25 10:51
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
dependencies = [
8+
("eap", "0007_alter_eapfile_options_alter_eapregistration_options_and_more"),
9+
]
10+
11+
operations = [
12+
migrations.RemoveField(
13+
model_name="simplifiedeap",
14+
name="hazard_impact_file",
15+
),
16+
migrations.RemoveField(
17+
model_name="simplifiedeap",
18+
name="risk_selected_protocols_file",
19+
),
20+
migrations.RemoveField(
21+
model_name="simplifiedeap",
22+
name="selected_early_actions_file",
23+
),
24+
migrations.AddField(
25+
model_name="simplifiedeap",
26+
name="hazard_impact_images",
27+
field=models.ManyToManyField(
28+
blank=True,
29+
related_name="simplified_eap_hazard_impact_images",
30+
to="eap.eapfile",
31+
verbose_name="Hazard Impact Images",
32+
),
33+
),
34+
migrations.AddField(
35+
model_name="simplifiedeap",
36+
name="risk_selected_protocols_images",
37+
field=models.ManyToManyField(
38+
blank=True,
39+
related_name="simplified_eap_risk_selected_protocols_images",
40+
to="eap.eapfile",
41+
verbose_name="Risk Selected Protocols Images",
42+
),
43+
),
44+
migrations.AddField(
45+
model_name="simplifiedeap",
46+
name="selected_early_actions_images",
47+
field=models.ManyToManyField(
48+
blank=True,
49+
related_name="simplified_eap_selected_early_actions_images",
50+
to="eap.eapfile",
51+
verbose_name="Selected Early Actions Images",
52+
),
53+
),
54+
]

eap/models.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -796,10 +796,10 @@ class SimplifiedEAP(EAPBaseModel):
796796
null=True,
797797
blank=True,
798798
)
799-
hazard_impact_file = models.ManyToManyField(
799+
hazard_impact_images = models.ManyToManyField(
800800
EAPFile,
801-
verbose_name=_("Hazard Impact Files"),
802-
related_name="simplified_eap_hazard_impact_files",
801+
verbose_name=_("Hazard Impact Images"),
802+
related_name="simplified_eap_hazard_impact_images",
803803
blank=True,
804804
)
805805

@@ -809,10 +809,10 @@ class SimplifiedEAP(EAPBaseModel):
809809
blank=True,
810810
)
811811

812-
risk_selected_protocols_file = models.ManyToManyField(
812+
risk_selected_protocols_images = models.ManyToManyField(
813813
EAPFile,
814-
verbose_name=_("Risk Selected Protocols Files"),
815-
related_name="simplified_eap_risk_selected_protocols_files",
814+
verbose_name=_("Risk Selected Protocols Images"),
815+
related_name="simplified_eap_risk_selected_protocols_images",
816816
blank=True,
817817
)
818818

@@ -822,10 +822,10 @@ class SimplifiedEAP(EAPBaseModel):
822822
null=True,
823823
blank=True,
824824
)
825-
selected_early_actions_file = models.ManyToManyField(
825+
selected_early_actions_images = models.ManyToManyField(
826826
EAPFile,
827-
verbose_name=_("Selected Early Actions Files"),
828-
related_name="simplified_eap_selected_early_actions_files",
827+
verbose_name=_("Selected Early Actions Images"),
828+
related_name="simplified_eap_selected_early_actions_images",
829829
blank=True,
830830
)
831831

eap/serializers.py

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,24 @@ def validate_file(self, file):
193193
return file
194194

195195

196+
# NOTE: Separate serializer for partial updating EAPFile instance
197+
class EAPFileUpdateSerializer(BaseEAPSerializer):
198+
id = serializers.IntegerField(required=True)
199+
file = serializers.FileField(required=False)
200+
201+
class Meta:
202+
model = EAPFile
203+
fields = "__all__"
204+
read_only_fields = (
205+
"created_by",
206+
"modified_by",
207+
)
208+
209+
def validate_file(self, file):
210+
validate_file_type(file)
211+
return file
212+
213+
196214
ALLOWED_MAP_TIMEFRAMES_VALUE = {
197215
OperationActivity.TimeFrame.YEARS: list(OperationActivity.YearsTimeFrameChoices.values),
198216
OperationActivity.TimeFrame.MONTHS: list(OperationActivity.MonthsTimeFrameChoices.values),
@@ -286,35 +304,35 @@ class SimplifiedEAPSerializer(
286304
enable_approaches = EnableApproachSerializer(many=True, required=False)
287305

288306
# FILES
289-
cover_image_details = EAPFileSerializer(source="cover_image", read_only=True)
290-
hazard_impact_file_details = EAPFileSerializer(source="hazard_impact_file", many=True, read_only=True)
291-
selected_early_actions_file_details = EAPFileSerializer(source="selected_early_actions_file", many=True, read_only=True)
292-
risk_selected_protocols_file_details = EAPFileSerializer(source="risk_selected_protocols_file", many=True, read_only=True)
307+
cover_image_file = EAPFileUpdateSerializer(source="cover_image", required=False, allow_null=True)
308+
hazard_impact_images_details = EAPFileSerializer(source="hazard_impact_images", many=True, read_only=True)
309+
selected_early_actions_file_details = EAPFileSerializer(source="selected_early_actions_images", many=True, read_only=True)
310+
risk_selected_protocols_file_details = EAPFileSerializer(source="risk_selected_protocols_images", many=True, read_only=True)
293311

294312
# Admin2
295313
admin2_details = Admin2Serializer(source="admin2", many=True, read_only=True)
296314

297315
class Meta:
298316
model = SimplifiedEAP
299-
fields = "__all__"
300317
read_only_fields = [
301318
"version",
302319
"is_locked",
303320
]
321+
exclude = ("cover_image",)
304322

305-
def validate_hazard_impact_file(self, images):
323+
def validate_hazard_impact_images(self, images):
306324
if images and len(images) > self.MAX_NUMBER_OF_IMAGES:
307325
raise serializers.ValidationError(f"Maximum {self.MAX_NUMBER_OF_IMAGES} images are allowed to upload.")
308326
validate_file_type(images)
309327
return images
310328

311-
def validate_risk_selected_protocols_file(self, images):
329+
def validate_risk_selected_protocols_images(self, images):
312330
if images and len(images) > self.MAX_NUMBER_OF_IMAGES:
313331
raise serializers.ValidationError(f"Maximum {self.MAX_NUMBER_OF_IMAGES} images are allowed to upload.")
314332
validate_file_type(images)
315333
return images
316334

317-
def validate_selected_early_actions_file(self, images):
335+
def validate_selected_early_actions_images(self, images):
318336
if images and len(images) > self.MAX_NUMBER_OF_IMAGES:
319337
raise serializers.ValidationError(f"Maximum {self.MAX_NUMBER_OF_IMAGES} images are allowed to upload.")
320338
validate_file_type(images)

eap/views.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -160,10 +160,9 @@ def get_queryset(self) -> QuerySet[SimplifiedEAP]:
160160
.prefetch_related(
161161
"eap_registration__partners",
162162
"admin2",
163-
"hazard_impact_file",
164-
"selected_early_actions_file",
165-
"risk_selected_protocols_file",
166-
"selected_early_actions_file",
163+
"hazard_impact_images",
164+
"risk_selected_protocols_images",
165+
"selected_early_actions_images",
167166
"planned_operations",
168167
"enable_approaches",
169168
)

0 commit comments

Comments
 (0)