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

Django Admin多对多字段仅显示已选选项的实现方法

Django Admin 优化 Collection 关联 CustomObject 显示方案

核心优化方向

因为业务上只需要查看已选的CustomObject,选/取消操作完全由定时任务处理,所以从两点入手解决加载慢的问题:

  • 过滤关联字段的查询集,只展示当前Collection已绑定的CustomObject
  • 把关联字段设为只读,避免加载大量选项的表单控件

完整 Admin 代码实现

from django.contrib import admin
from .models import Collection, CustomObject

class CollectionAdmin(admin.ModelAdmin):
    search_fields = ['name', 'id']
    # 将关联字段设为只读,直接展示已选内容,不渲染多选控件
    readonly_fields = ['custom_objects']

    def formfield_for_manytomany(self, db_field, request, **kwargs):
        # 只处理custom_objects这个多对多字段
        if db_field.name == 'custom_objects':
            # 获取当前正在编辑的Collection实例ID
            obj_id = request.resolver_match.kwargs.get('object_id')
            if obj_id:
                # 过滤出当前Collection已关联的所有CustomObject
                kwargs["queryset"] = CustomObject.objects.filter(collection__id=obj_id)
            else:
                # 新增页面直接返回空查询集(毕竟关联操作由定时任务做)
                kwargs["queryset"] = CustomObject.objects.none()
        return super().formfield_for_manytomany(db_field, request, **kwargs)

admin.site.register(Collection, CollectionAdmin)
admin.site.register(CustomObject)

效果说明

  • 进入Collection编辑页时,custom_objects只会显示当前实例绑定的10-20条数据,不会加载全部2万+条,页面加载速度大幅提升
  • 只读设置彻底避免了加载臃肿的多选控件,同时也符合“仅查看不操作”的业务要求
  • 新增Collection页面时,该字段显示为空,完全适配定时任务处理关联的逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:10:34