如何更改Django管理中的默认小部件?
我在我的项目中使用Django自动生成的管理界面。下面是结果:
在“教授”这个字段中,Django自动生成了一个下拉列表,但里面至少有1000个选项。因此,我想把这个列表换成更友好的方式,比如“裁判”这个字段的输入方式,你只需要输入名字的首字母,相关的选项就会出现在下面。
我该如何修改admin.py或models.py文件来实现这个效果呢?
3 个回答
0
你是需要选择一个教授,还是多个教授呢?
下拉列表是因为你在模型中使用了类似 professor = models.ForeignKey(Professor)
这样的代码。这里的“ForeignKey”意味着你只能选择一个教授,但你提到的这个小工具却让人觉得可以选择多个教授。所以你的意思不是很明确。
在下拉列表中,你还可以通过输入首字母来选择选项。
1
你在寻找:
ModelAdmin.formfield_overrides
这个功能提供了一种简单粗暴的方法,可以修改一些在管理后台使用的字段选项。formfield_overrides 是一个字典,它把字段类映射到一个字典,这个字典包含了在创建字段时需要传递的参数。
看看这个例子:
from django.db import models
from django.contrib import admin
# Import our custom widget and our model from where they're defined
from myapp.widgets import RichTextEditorWidget
from myapp.models import MyModel
class MyModelAdmin(admin.ModelAdmin):
formfield_overrides = {
models.TextField: {'widget': RichTextEditorWidget},
}
2
你可以试着在admin.py文件中把你的字段添加到raw_id字段里:
class YourModelAdmin(admin.ModelAdmin):
raw_id_fields=('professor', )
admin.site.register(YourModel, YourModelAdmin)
这样你就会得到一个很不错的搜索按钮。