from django.contrib import admin
from django.utils.html import format_html
from .models import (
Category,
CloudProvider,
ConsultingPartner,
Currency,
ExternalLink,
Plan,
PlanPrice,
Service,
ServiceOffering,
Term,
Lead,
)
@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(Currency)
class CurrencyAdmin(admin.ModelAdmin):
list_display = ("code", "name", "symbol")
search_fields = ("code", "name")
ordering = ("code",)
@admin.register(Term)
class TermAdmin(admin.ModelAdmin):
list_display = ("name", "order")
ordering = ("order", "name")
search_fields = ("name", "description")
@admin.register(CloudProvider)
class CloudProviderAdmin(admin.ModelAdmin):
list_display = ("name", "slug", "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"
logo_preview.short_description = "Logo"
class ExternalLinkInline(admin.TabularInline):
model = ExternalLink
extra = 1
fields = ("description", "url", "order")
ordering = ("order", "description")
@admin.register(Service)
class ServiceAdmin(admin.ModelAdmin):
list_display = ("name", "logo_preview", "category_list", "partner_list")
list_filter = ("categories",)
search_fields = ("name", "description", "slug")
prepopulated_fields = {"slug": ("name",)}
filter_horizontal = ("categories",)
inlines = [ExternalLinkInline]
def logo_preview(self, obj):
if obj.logo:
return format_html(
'
', obj.logo.url
)
return "No logo"
logo_preview.short_description = "Logo"
def category_list(self, obj):
return ", ".join([cat.name for cat in obj.categories.all()])
category_list.short_description = "Categories"
def partner_list(self, obj):
return ", ".join([partner.name for partner in obj.consulting_partners.all()])
partner_list.short_description = "Consulting Partners"
@admin.register(PlanPrice)
class PlanPriceAdmin(admin.ModelAdmin):
model = PlanPrice
class PlanInline(admin.StackedInline):
model = Plan
extra = 1
fieldsets = (
(None, {"fields": ("name", "description", "is_default", "features", "order")}),
(
"Pricing",
{
"fields": ("get_prices",),
},
),
)
readonly_fields = ("get_prices",)
def get_prices(self, obj):
if not obj:
return "Save the plan first to add prices"
html = ['
Currency | Term | Price | Actions |
---|---|---|---|
{price.currency} | {price.term} | {price.price} | Edit |