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

Django Admin:如何从父模型视图重定向到子模型视图?

当然可以实现!

要让Django Admin里的制造商名称点击后跳转到关联的汽车列表页面,只需要自定义Manufacturer的Admin类,给名称字段添加跳转链接即可,具体步骤如下:

1. 优化反向关联名称(可选但推荐)

先提个小细节:你当前Car模型里的related_name="manufacturers"有点容易混淆,因为这个参数是用来定义从Manufacturer反向访问Car的属性名,比如manufacturer.manufacturers.all()读起来怪怪的。建议改成更清晰的related_name="cars",修改后的Car模型如下:

class Car(models.Model):
    manufacturer = models.ForeignKey(Manufacturer, on_delete=models.CASCADE, related_name="cars")
    # 其他相关字段

如果不想修改原代码也没关系,后续代码对应调整参数即可。

2. 自定义Manufacturer Admin类

在你的admin.py文件中,创建自定义的ManufacturerAdmin类,通过自定义列表字段来生成带跳转的链接:

from django.contrib import admin
from django.urls import reverse
from django.utils.html import format_html
from .models import Manufacturer, Car

class ManufacturerAdmin(admin.ModelAdmin):
    # 用自定义的带链接字段替换原有的name字段,也可以添加到现有list_display中
    list_display = ('linked_name',)

    def linked_name(self, obj):
        # 生成Car Admin列表页面的基础URL
        car_changelist_url = reverse(
            'admin:{}_{}_changelist'.format(
                Car._meta.app_label, 
                Car._meta.model_name
            )
        )
        # 添加过滤参数,只显示当前制造商的汽车
        # 如果你没修改related_name,这里参数名要改成manufacturers__id
        filtered_url = f"{car_changelist_url}?manufacturer__id={obj.id}"
        # 返回安全的HTML链接
        return format_html('<a href="{}">{}</a>', filtered_url, obj.name)
    
    # 给自定义字段设置显示名称
    linked_name.short_description = '制造商名称'

# 注册自定义的Admin类
admin.site.register(Manufacturer, ManufacturerAdmin)
admin.site.register(Car)

3. 实现原理说明

  • reverse('admin:{}_{}_changelist'):Django内置的URL反转方法,用来生成对应模型的Admin列表页面地址,无需硬编码URL路径,适配不同的项目配置。
  • 过滤参数?manufacturer__id={obj.id}:Admin原生支持通过URL参数进行列表过滤,这里指定只显示关联当前制造商ID的汽车记录,跳转后会自动应用过滤条件。
  • format_html():用来安全生成HTML内容,避免XSS攻击,是Django官方推荐的方式(替代旧版的allow_tags属性)。

设置完成后,刷新Manufacturer的Admin列表页面,点击制造商名称就会自动跳转到过滤好的对应汽车列表啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:22:07