Skip to content

Commit daff017

Browse files
klpolandlucaspar
authored andcommitted
add save_model override to admin for list fields
1 parent 9876d5d commit daff017

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

gateway/sds_gateway/api_methods/admin.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import json
2+
13
from django.contrib import admin
24

35
from sds_gateway.api_methods import models
@@ -34,6 +36,42 @@ def get_keywords(self, obj):
3436
return ", ".join([kw.name for kw in keywords[:5]])
3537
return "-"
3638

39+
def save_model(self, request, obj, form, change):
40+
"""Override save_model to handle list fields."""
41+
for field_name in models.Dataset.list_fields:
42+
field_value = getattr(obj, field_name, None)
43+
44+
if field_value is None or field_value == "":
45+
setattr(obj, field_name, [])
46+
elif isinstance(field_value, str):
47+
try:
48+
parsed_value = json.loads(field_value)
49+
if isinstance(parsed_value, list):
50+
setattr(obj, field_name, parsed_value)
51+
else:
52+
setattr(obj, field_name, [parsed_value])
53+
except (json.JSONDecodeError, TypeError):
54+
if "," in field_value:
55+
# Split by comma and strip whitespace
56+
setattr(
57+
obj,
58+
field_name,
59+
[
60+
item.strip()
61+
for item in field_value.split(",")
62+
if item.strip()
63+
],
64+
)
65+
else:
66+
# Single value, wrap in list
67+
setattr(
68+
obj,
69+
field_name,
70+
[field_value.strip()] if field_value.strip() else [],
71+
)
72+
73+
super().save_model(request, obj, form, change)
74+
3775

3876
@admin.register(models.TemporaryZipFile)
3977
class TemporaryZipFileAdmin(admin.ModelAdmin): # pyright: ignore[reportMissingTypeArgument]

0 commit comments

Comments
 (0)