refactor admin into several files
This commit is contained in:
parent
d9a04655ed
commit
a3cf1cc590
7 changed files with 340 additions and 184 deletions
108
hub/services/admin/services.py
Normal file
108
hub/services/admin/services.py
Normal file
|
@ -0,0 +1,108 @@
|
|||
"""
|
||||
Admin classes for services and service offerings
|
||||
"""
|
||||
|
||||
from django.contrib import admin
|
||||
from django.utils.html import format_html
|
||||
|
||||
from ..models import Service, ServiceOffering, ExternalLink, ExternalLinkOffering, Plan
|
||||
|
||||
|
||||
class ExternalLinkInline(admin.TabularInline):
|
||||
"""Inline admin for ExternalLink model"""
|
||||
|
||||
model = ExternalLink
|
||||
extra = 1
|
||||
fields = ("description", "url", "order")
|
||||
ordering = ("order", "description")
|
||||
|
||||
|
||||
class ExternalLinkOfferingInline(admin.TabularInline):
|
||||
"""Inline admin for ExternalLinkOffering model"""
|
||||
|
||||
model = ExternalLinkOffering
|
||||
extra = 1
|
||||
fields = ("description", "url", "order")
|
||||
ordering = ("order", "description")
|
||||
|
||||
|
||||
class PlanInline(admin.StackedInline):
|
||||
"""Inline admin for Plan model"""
|
||||
|
||||
model = Plan
|
||||
extra = 1
|
||||
fieldsets = (
|
||||
(None, {"fields": ("name", "description", "pricing", "plan_description")}),
|
||||
)
|
||||
|
||||
|
||||
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(Service)
|
||||
class ServiceAdmin(admin.ModelAdmin):
|
||||
"""Admin configuration for Service model"""
|
||||
|
||||
list_display = (
|
||||
"name",
|
||||
"logo_preview",
|
||||
"category_list",
|
||||
"is_featured",
|
||||
"is_coming_soon",
|
||||
"disable_listing",
|
||||
)
|
||||
list_filter = ("categories",)
|
||||
search_fields = ("name", "description", "slug")
|
||||
prepopulated_fields = {"slug": ("name",)}
|
||||
filter_horizontal = ("categories",)
|
||||
inlines = [ExternalLinkInline, OfferingInline]
|
||||
|
||||
def logo_preview(self, obj):
|
||||
"""Display logo preview in admin list view"""
|
||||
if obj.logo:
|
||||
return format_html(
|
||||
'<img src="{}" style="max-height: 50px;"/>', obj.logo.url
|
||||
)
|
||||
return "No logo"
|
||||
|
||||
logo_preview.short_description = "Logo"
|
||||
|
||||
def category_list(self, obj):
|
||||
"""Display categories as comma-separated list"""
|
||||
return ", ".join([cat.name for cat in obj.categories.all()])
|
||||
|
||||
category_list.short_description = "Categories"
|
||||
|
||||
def partner_list(self, obj):
|
||||
"""Display consulting partners as comma-separated list"""
|
||||
return ", ".join([partner.name for partner in obj.consulting_partners.all()])
|
||||
|
||||
partner_list.short_description = "Consulting Partners"
|
||||
|
||||
|
||||
@admin.register(ServiceOffering)
|
||||
class ServiceOfferingAdmin(admin.ModelAdmin):
|
||||
"""Admin configuration for ServiceOffering model"""
|
||||
|
||||
list_display = ("service", "cloud_provider")
|
||||
list_filter = ("service", "cloud_provider")
|
||||
search_fields = ("service__name", "cloud_provider__name", "description")
|
||||
inlines = [ExternalLinkOfferingInline, PlanInline]
|
Loading…
Add table
Add a link
Reference in a new issue