如何在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,提问作者Альберт Александров
相关产品推荐
相关产品推荐

