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

Django Admin如何根据URL参数country_id在新页面仅展示指定Inline

解决方案

你需要调整3处核心逻辑即可实现需求:

1. 首先注册代理模型的Admin

你定义的BrandOrderFilter代理模型和对应的BrandOrderFilteringAdmin需要先注册到Django Admin,才能使用原生Admin的路由和渲染能力:

# 放在admin.py的末尾即可,注意替换your_app为你实际的应用名
admin.site.register(BrandOrderFilter, BrandOrderFilteringAdmin)

2. 精简BrandOrderFilteringAdmin配置,隐藏所有原模型字段

直接屏蔽原模型的所有字段,页面就只会渲染你指定的Inline:

class BrandOrderFilteringAdmin(admin.ModelAdmin):
    inlines = [CorporateBrandOrderFilterAdmin,]
    # 直接返回空字段列表,原模型的所有字段都不会渲染
    def get_fields(self, request, obj=None):
        return []
    # 可选:如果不需要删除/新增父对象的权限,可以直接禁用
    def has_add_permission(self, request):
        return False
    def has_delete_permission(self, request, obj=None):
        return False

3. 修改跳转链接,直接指向代理模型的编辑页

你之前定义的filter_brand空视图完全可以删除,直接跳转代理Admin的原生编辑路由即可,同时要带上当前父对象的ID:

def get_countries(self, instance):
    from django.urls import reverse
    country_list = '<ul style="font-weight: bold;list-style-type:circle;">'
    countries = Country.objects.all()
    for country in countries:
        # 替换your_app为实际应用名,路由名格式为admin:{{应用名}}_{{代理模型小写名}}_change
        url = reverse('admin:your_app_brandorderfilter_change', args=(instance.id,))
        country_list += f'<li class="changelist"><a href="{url}?country_id={country.id}" target="_blank">{country.name}</a></li>'
    country_list+='</ul>'
    return mark_safe(country_list)

如果不确定代理模型的路由名,可以执行python manage.py show_urls | grep brandorderfilter查看实际的路由标识。

你已经写好的Inline按国家过滤的逻辑不需要修改,直接就能生效。

内容的提问来源于stack exchange,提问作者Kishore Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:06:00