Configure JSON admin fields
All checks were successful
Tests / test (push) Successful in 24s

This commit is contained in:
Tobias Kunze 2025-09-04 00:42:49 +02:00
parent e61bf9076f
commit 6c7f945c7a

View file

@ -1,5 +1,6 @@
from django.contrib import admin, messages from django.contrib import admin, messages
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django_jsonform.widgets import JSONFormWidget
from servala.core.forms import ControlPlaneAdminForm, ServiceDefinitionAdminForm from servala.core.forms import ControlPlaneAdminForm, ServiceDefinitionAdminForm
from servala.core.models import ( from servala.core.models import (
@ -111,12 +112,60 @@ class ServiceAdmin(admin.ModelAdmin):
autocomplete_fields = ("category",) autocomplete_fields = ("category",)
prepopulated_fields = {"slug": ["name"]} 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) @admin.register(CloudProvider)
class CloudProviderAdmin(admin.ModelAdmin): class CloudProviderAdmin(admin.ModelAdmin):
list_display = ("name",) list_display = ("name",)
search_fields = ("name", "description") 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) @admin.register(ControlPlane)
class ControlPlaneAdmin(admin.ModelAdmin): class ControlPlaneAdmin(admin.ModelAdmin):