You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django中将Product模型指定实例注册为Admin侧边栏可访问视图

实现步骤

步骤1:提前创建目标产品实例

先在数据库中创建你需要直接显示的Product实例(比如名称为Shoes的产品),可以直接通过名称查询该实例,不需要固定记录主键ID。

步骤2:自定义Admin站点重写菜单逻辑

在你的APP的admin.py文件中添加如下代码,自定义Django Admin站点,在侧边栏注入自定义的ADMININFO分类和单个产品入口:

from django.contrib.admin import AdminSite
from django.urls import reverse
from .models import Product, Supplier

# 自定义Admin站点
class CustomAdminSite(AdminSite):
    site_header = "管理后台"
    site_title = "管理后台"

    def get_app_list(self, request):
        # 先获取默认生成的应用菜单列表
        app_list = super().get_app_list(request)

        # 查询要添加的目标产品实例
        try:
            target_product = Product.objects.get(name="Shoes")
            # 构造该产品实例的详情/编辑页URL,注意把下方的myapp替换为你的Product模型所在APP的名称
            product_url = reverse("admin:myapp_product_change", args=(target_product.pk,))

            # 查找已有的ADMININFO分类,不存在则创建
            admininfo_menu = next((item for item in app_list if item["name"] == "ADMININFO"), None)
            if not admininfo_menu:
                admininfo_menu = {
                    "name": "ADMININFO",
                    "app_label": "admininfo",
                    "models": []
                }
                app_list.append(admininfo_menu)

            # 把单个产品入口添加到ADMININFO分类下
            admininfo_menu["models"].append({
                "name": "Shoes产品详情", # 侧边栏显示的文字
                "object_name": "ShoesProduct",
                "admin_url": product_url,
                "perms": {"view": True} # 可根据需求调整权限控制
            })
        except Product.DoesNotExist:
            # 目标产品未创建时不显示入口,避免报错
            pass
        return app_list

# 实例化自定义Admin站点
admin_site = CustomAdminSite(name="custom_admin")

# 把你原来注册到默认admin的模型注册到自定义站点
class ProductAdmin(admin.ModelAdmin):
    # 如果你希望该入口点击后只能查看不能编辑,可以添加以下权限控制
    def has_change_permission(self, request, obj=None):
        if obj and obj.name == "Shoes":
            return False
        return super().has_change_permission(request, obj)

admin_site.register(Product, ProductAdmin)
admin_site.register(Supplier)

步骤3:替换默认Admin路由

修改项目根目录的urls.py,把默认的Admin路由替换为你自定义的Admin站点路由:

from django.contrib import admin
from django.urls import path
# 导入你自定义的admin站点,注意把myapp替换为对应的APP名称
from myapp.admin import admin_site

urlpatterns = [
    # 注释掉原来的默认admin路由
    # path('admin/', admin.site.urls),
    path('admin/', admin_site.urls),
    # 其他路由保持不变
]
注意事项
  • 构造URL时的admin:myapp_product_change规则为admin:<APP名称>_<模型名小写>_change,如果不确定可以执行python manage.py show_urls查看对应路由名
  • 如果你需要添加多个单个产品入口,只需要重复查询实例、构造URL、添加到admininfo_menu['models']的逻辑即可
  • 权限控制可以按需调整,比如仅超级用户可见的话,只需要在添加入口前加if request.user.is_superuser:判断即可

内容的提问来源于stack exchange,提问作者Tsige Gebregziagher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 13:15:03