""" Admin classes for cloud providers and consulting partners """ from django.contrib import admin from django.utils.html import format_html from django import forms from adminsortable2.admin import SortableAdminMixin from ..models import CloudProvider, ConsultingPartner, ServiceOffering from .widgets import ImageLibraryWidget class CloudProviderAdminForm(forms.ModelForm): """Custom form for CloudProvider admin with image widget""" class Meta: model = CloudProvider fields = "__all__" widgets = { "image_library": ImageLibraryWidget(), } class ConsultingPartnerAdminForm(forms.ModelForm): """Custom form for ConsultingPartner admin with image widget""" class Meta: model = ConsultingPartner fields = "__all__" widgets = { "image_library": ImageLibraryWidget(), } class OfferingInline(admin.StackedInline): """Inline admin for ServiceOffering model""" model = ServiceOffering extra = 1 fieldsets = ( ( None, { "fields": ( "description", "service", "cloud_provider", "offer_description", ) }, ), ) show_change_link = True @admin.register(CloudProvider) class CloudProviderAdmin(SortableAdminMixin, admin.ModelAdmin): """Admin configuration for CloudProvider model""" form = CloudProviderAdminForm list_display = ( "name", "slug", "logo_preview", "disable_listing", "is_featured", "order", ) search_fields = ("name", "description") prepopulated_fields = {"slug": ("name",)} inlines = [OfferingInline] ordering = ("order",) fieldsets = ( (None, {"fields": ("name", "slug", "description", "order")}), ( "Images", { "fields": ("image_library",), "description": "Select an image from the Image Library.", }, ), ( "Contact Information", {"fields": ("website", "linkedin", "phone", "email", "address")}, ), ("Settings", {"fields": ("is_featured", "disable_listing")}), ) def logo_preview(self, obj): """Display logo preview in admin list view""" logo = obj.get_logo if logo: return format_html('', logo.url) return "No logo" logo_preview.short_description = "Logo" @admin.register(ConsultingPartner) class ConsultingPartnerAdmin(SortableAdminMixin, admin.ModelAdmin): """Admin configuration for ConsultingPartner model""" form = ConsultingPartnerAdminForm list_display = ( "name", "website", "logo_preview", "disable_listing", "is_featured", "order", ) search_fields = ("name", "description") prepopulated_fields = {"slug": ("name",)} filter_horizontal = ("services", "cloud_providers") ordering = ("order",) fieldsets = ( (None, {"fields": ("name", "slug", "description", "order")}), ( "Images", { "fields": ("image_library",), "description": "Select an image from the Image Library.", }, ), ( "Contact Information", {"fields": ("website", "linkedin", "phone", "email", "address")}, ), ( "Relations", {"fields": ("services", "cloud_providers"), "classes": ("collapse",)}, ), ("Settings", {"fields": ("is_featured", "disable_listing")}), ) def logo_preview(self, obj): """Display logo preview in admin list view""" logo = obj.get_logo if logo: return format_html('', logo.url) return "No logo" logo_preview.short_description = "Logo"