From 6c7f945c7a3e784fa224c69df56baeb04736d1ea Mon Sep 17 00:00:00 2001 From: Tobias Kunze Date: Thu, 4 Sep 2025 00:42:49 +0200 Subject: [PATCH] Configure JSON admin fields --- src/servala/core/admin.py | 49 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/src/servala/core/admin.py b/src/servala/core/admin.py index 740b7bf..ed07574 100644 --- a/src/servala/core/admin.py +++ b/src/servala/core/admin.py @@ -1,5 +1,6 @@ from django.contrib import admin, messages from django.utils.translation import gettext_lazy as _ +from django_jsonform.widgets import JSONFormWidget from servala.core.forms import ControlPlaneAdminForm, ServiceDefinitionAdminForm from servala.core.models import ( @@ -111,12 +112,60 @@ class ServiceAdmin(admin.ModelAdmin): autocomplete_fields = ("category",) prepopulated_fields = {"slug": ["name"]} + def get_form(self, request, obj=None, **kwargs): + form = super().get_form(request, obj, **kwargs) + # JSON schema for external_links field + external_links_schema = { + "type": "array", + "title": "External Links", + "items": { + "type": "object", + "title": "Link", + "properties": { + "url": {"type": "string", "format": "uri", "title": "URL"}, + "title": {"type": "string", "title": "Title"}, + "featured": { + "type": "boolean", + "title": "Featured", + "default": False, + "description": "Featured links will be shown on the service list page", + }, + }, + "required": ["url", "title"], + }, + } + form.base_fields["external_links"].widget = JSONFormWidget( + schema=external_links_schema + ) + return form + @admin.register(CloudProvider) class CloudProviderAdmin(admin.ModelAdmin): list_display = ("name",) search_fields = ("name", "description") + def get_form(self, request, obj=None, **kwargs): + form = super().get_form(request, obj, **kwargs) + # JSON schema for external_links field + external_links_schema = { + "type": "array", + "title": "External Links", + "items": { + "type": "object", + "title": "Link", + "properties": { + "url": {"type": "string", "format": "uri", "title": "URL"}, + "title": {"type": "string", "title": "Title"}, + }, + "required": ["url", "title"], + }, + } + form.base_fields["external_links"].widget = JSONFormWidget( + schema=external_links_schema + ) + return form + @admin.register(ControlPlane) class ControlPlaneAdmin(admin.ModelAdmin):