Skip to main content

Integrate SmartBase Admin into Your Django App

This page demonstrates how to set up django-smartbase-admin with models in your Django app. We will show configuration and show the result using actual model examples: Category, Manufacturer, and Product.

SmartBase Admin allows for customizable admin panels, inline relationships, and clean UI navigation — all defined in a structured sb_admin.py file.


Step 1: Create sb_admin.py

In your app (e.g. catalog/), create a file named sb_admin.py. This file is used to register your models with the SmartBase admin and define how they appear in the UI.


Code: sb_admin.py for models of Blog app

Define inlines

catalog/sb_admin.py
class ProductImageInline(SBAdminTableInline):
model = ProductImage
fields = ("image", "alt_text")
extra = 1

You can learn more about inlines and different inline types in 🔗 Inlines section.

💡Example #1: Product admin

catalog/sb_admin.py
@admin.register(Product, site=sb_admin_site)
class ProductSBAdmin(SBAdmin):
model = Product
inlines = [ProductImageInline]
sbadmin_list_display = (
"name",
"sku",
SBAdminField(name="price", title="Price"),
SBAdminField(name="is_active", title="Active"),
"manufacturer",
)
search_fields = ["name", "sku"]
list_filter = ["is_active"]
fieldsets = [
(
"Appearance",
{
"fields": [
"name",
"description",
"price",
]
},
),
(
"Base settings",
{
"classes": [DETAIL_STRUCTURE_RIGHT_CLASS], # Fieldset Layout class
"fields": [
"is_active",
"slug",
"sku",
"categories",
"manufacturer",
],
},
),
]

💡Example #2: Category admin

catalog/sb_admin.py
@admin.register(Category, site=sb_admin_site)
class CategorySBAdmin(SBAdmin):
model = Category
sbadmin_list_display = ("name", "slug", "parent")
search_fields = ["name"]
ordering = ["name"]
fieldsets = [
(
None,
{
"fields": ["name", "slug", "image", "parent"]
},
)
]

💡Example #3: Manufacturer admin

catalog/sb_admin.py
@admin.register(Manufacturer, site=sb_admin_site)
class ManufacturerSBAdmin(SBAdmin):
model = Manufacturer
sbadmin_list_display = ("name",)
search_fields = ["name"]
fieldsets = [
(
None,
{
"fields": ["name", "logo"]
},
)
]