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
相关产品推荐
相关产品推荐

