from django.contrib import admin from django.utils.html import format_html from .models import ( CloudProvider, ConsultingPartner, Country, ServiceLevel, Service, Category, ) @admin.register(Category) class CategoryAdmin(admin.ModelAdmin): list_display = ("name", "slug", "parent", "order") list_filter = ("parent",) search_fields = ("name", "description") prepopulated_fields = {"slug": ("name",)} ordering = ("order", "name") @admin.register(CloudProvider) class CloudProviderAdmin(admin.ModelAdmin): list_display = ("name", "slug", "logo_preview") search_fields = ("name",) prepopulated_fields = {"slug": ("name",)} def logo_preview(self, obj): if obj.logo: return format_html( '', obj.logo.url ) return "No logo" @admin.register(Country) class CountryAdmin(admin.ModelAdmin): list_display = ("name", "code") search_fields = ("name", "code") @admin.register(ServiceLevel) class ServiceLevelAdmin(admin.ModelAdmin): list_display = ("name", "response_time") search_fields = ("name",) @admin.register(Service) class ServiceAdmin(admin.ModelAdmin): list_display = ( "name", "cloud_provider", "service_level", "price", "logo_preview", "category_list", "partner_list", ) list_filter = ( "cloud_provider", "service_level", "countries", "categories", "consulting_partners", ) filter_horizontal = ("countries", "categories", "consulting_partners") search_fields = ("name", "description", "slug") prepopulated_fields = {"slug": ("name",)} def logo_preview(self, obj): if obj.logo: return format_html( '', obj.logo.url ) return "No logo" def category_list(self, obj): return ", ".join([cat.name for cat in obj.categories.all()]) def partner_list(self, obj): return ", ".join([partner.name for partner in obj.consulting_partners.all()]) partner_list.short_description = "Consulting Partners" category_list.short_description = "Categories" @admin.register(ConsultingPartner) class ConsultingPartnerAdmin(admin.ModelAdmin): list_display = ("name", "website", "logo_preview") search_fields = ("name", "description") prepopulated_fields = {"slug": ("name",)} def logo_preview(self, obj): if obj.logo: return format_html( '', obj.logo.url ) return "No logo"