如何为Django模型添加ModelMultipleChoiceField并自定义Admin展示
解决Django Admin中ManyToManyField的多选展示问题
要把ProductsSet模型的products_set字段在Admin中改成带多选框的列表样式,只需在对应的ModelAdmin类中添加filter_horizontal或filter_vertical属性即可,无需手动创建ModelMultipleChoiceField(Django Admin会自动处理)。
修改步骤
- 打开
admin.py,找到ProductsSetAdmin类 - 添加
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
相关产品推荐
相关产品推荐

