首页 > 解决方案 > Django的ModelAdmin有没有办法在渲染ManyToMany选择框时显示不同的字段?

问题描述

我有一个带有ManyToManyField.

在渲染管理页面以添加模型实例时,ModelAdmin渲染一个带有类似选项的选择框SomeModel object(7c158809-4c9b-4d44-b3ac-9f225b8bd076(模型使用 uuid 作为其主键)。

如何让 Django 管理员使用不同的、更友好的字段呈现选择框?

标签: djangodjango-modelsdjango-admin

解决方案


尽管有最后一个答案,但如果您的 Django 版本大于 2.0,一种优化和干净的方法是为您的SomeModel. 就像下面的代码:

@admin.register(SomeModel)
class SomeModelAdmin(admin.ModelAdmin):
    list_display = ('name', 'created_time', ) # change this part to your fields
    search_fields = ('name', ) # If you have this field in your model

然后在您的源模型管理代码中(该模型与 有 M2M 关系SomeModel)添加一个属性 as auto_complete_fields(从版本 2 添加到 Django)并将其引用到SomeModelAdmin. 类似于以下代码:

@admin.register(SourceModel)
class SourceModelAdmin(admin.ModelAdmin):
    list_display = ("name", "created_time", )
    search_fields = ('name', )
    autocomplete_fields = ['some_model_field', ] # i.e. your M2M field in that model

推荐阅读