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

如何在Django admin的TabularInline中为字段添加可跳转链接

Django官方内置实现方案

Django 3.2及以上版本已经提供了官方的标准化实现方式,核心依赖@admin.display装饰器实现自定义展示字段,不需要自行封装装饰器。

针对你的场景的实现代码

from django.contrib import admin
from django.urls import reverse
from django.utils.safestring import mark_safe
from .models import Post

class PostInline(admin.TabularInline):
    model = Post
    # 必须把自定义字段加入只读字段列表
    readonly_fields = ['author_edit_link']
    fields = ['title', 'author', 'author_edit_link']

    @admin.display(description="作者编辑页")
    def author_edit_link(self, instance):
        if not instance.author:
            return "-"
        # 路由规则为 admin:{app名}_{模型小写名}_change
        edit_url = reverse("admin:auth_user_change", args=(instance.author.id,))
        return mark_safe(f"<a href='{edit_url}'>{instance.author}</a>")

说明

  • 如果使用自定义用户模型,只需将reverse方法中的auth_user_change替换为对应{你的用户模型所在app名}_{用户模型小写名}_change即可。
  • 如果需要在多个Inline中复用该逻辑,可以把自定义字段方法抽为公共Mixin类,符合Django官方的编码规范。
  • 如果你使用的Django版本低于3.2,没有@admin.display装饰器,可以用给方法加属性的方式实现,代码如下:
class PostInline(admin.TabularInline):
    model = Post
    readonly_fields = ['author_edit_link']
    fields = ['title', 'author', 'author_edit_link']

    def author_edit_link(self, instance):
        if not instance.author:
            return "-"
        edit_url = reverse("admin:auth_user_change", args=(instance.author.id,))
        return mark_safe(f"<a href='{edit_url}'>{instance.author}</a>")
    
    author_edit_link.short_description = "作者编辑页"
    # 3.1及更低版本需要额外加allow_tags属性允许HTML渲染
    author_edit_link.allow_tags = True

内容的提问来源于stack exchange,提问作者Альберт Александров

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:45:03