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

Django admin中ManyToMany字段是否支持查看、编辑关联对象详情?

Django Admin多对多字段关联对象查看实现方案

完全可以通过原生配置实现该需求,以下是两种常用的落地方式:

方案一:使用raw_id_fields配置(操作最简单)

直接在对应ModelAdmin类中添加raw_id_fields配置,指定要改造的多对多字段即可:

from django.contrib import admin
from .models import 你的模型类

@admin.register(你的模型类)
class 你的模型类Admin(admin.ModelAdmin):
    # 替换为你自己的多对多字段名
    raw_id_fields = ("你的多对多字段名",)

配置后多对多字段旁会出现放大镜图标,点击即可跳转到关联对象的列表选择页,选中对象后也可以直接点击字段旁的编辑入口跳转至对象详情页。

方案二:自定义只读字段,添加独立跳转入口

如果需要在详情页直接展示所有关联对象的可点击链接,可以自定义只读字段实现:

from django.contrib import admin
from django.urls import reverse
from django.utils.html import format_html
from .models import 你的模型类

@admin.register(你的模型类)
class 你的模型类Admin(admin.ModelAdmin):
    # 把自定义的关联对象展示字段加入表单显示区域
    readonly_fields = ("关联对象入口",)
    # 按需调整字段显示顺序
    fields = ("其他普通字段", "你的多对多字段名", "关联对象入口")

    def 关联对象入口(self, obj):
        links = []
        for 关联对象 in obj.你的多对多字段名.all():
            # 生成对应对象的Admin编辑页跳转路径
            跳转路径 = reverse(f"admin:{关联对象._meta.app_label}_{关联对象._meta.model_name}_change", args=(关联对象.id,))
            links.append(format_html('<a href="{}" target="_blank">{}</a>', 跳转路径, str(关联对象)))
        return format_html("、".join(links)) if links else "暂无关联对象"
    关联对象入口.short_description = "关联对象查看入口"

配置后在对象的编辑/详情页会单独展示关联对象查看入口区域,所有关联对象都会以新页面打开的链接形式展示,点击即可直接查看、编辑对应对象的所有属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:36:01