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

如何为Django模型添加ModelMultipleChoiceField并自定义Admin展示

解决Django Admin中ManyToManyField的多选展示问题

要把ProductsSet模型的products_set字段在Admin中改成带多选框的列表样式,只需在对应的ModelAdmin类中添加filter_horizontal或filter_vertical属性即可,无需手动创建ModelMultipleChoiceField(Django Admin会自动处理)。

修改步骤

  1. 打开admin.py,找到ProductsSetAdmin类
  2. 添加filter_horizontal(左右分栏多选)或filter_vertical(上下分栏多选)属性,指定products_set字段

修改后的ProductsSetAdmin代码如下:

@admin.register(ProductsSet)
class ProductsSetAdmin(admin.ModelAdmin):
    list_display = ('name', 'borrower', 'created_date', 'status', 'total_amount')
    fields = ['id', 'name', 'products_set', 'created_date', 'borrower', 'status', 'total_amount']
    list_filter = ['borrower','created_date','status']
    # 使用左右分栏的多选样式
    filter_horizontal = ['products_set']
    # 或者使用上下分栏的样式:filter_vertical = ['products_set']

说明

  • filter_horizontal:生成左右两个面板,左侧是可选的ProductsInstance项,右侧是已选中项,支持搜索和批量移动
  • filter_vertical:生成上下两个列表,上方是可选项,下方是已选项,样式更紧凑

两种方式都能实现你期望的多选框列表展示效果,替代默认的ManyToManyField展示样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:26:24