我正在为我的项目使用自动生成的 Django 管理员。结果如下:
对于字段“Professor”,Django 自动生成了一个下拉列表,但其中至少有 1000 个元素。因此,我想用更用户友好的东西替换列表,例如用于“裁判”的小部件,您基本上只需键入名称的第一个字母,元素就会出现在下面。
如何修改 admin.py 或 models.py 文件以获得该结果?
您可以尝试将您的字段添加到 admin.py 中的 raw_id 字段:
class YourModelAdmin(admin.ModelAdmin):
raw_id_fields=('professor', )
admin.site.register(YourModel, YourModelAdmin)
为此,您将获得一个漂亮的搜索按钮
您正在寻找:
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},
}
您只需要选择一位教授还是多位教授?生成下拉列表是因为您professor = models.ForeignKey(Professor)
在模型中使用了类似的东西。ForeignKey 意味着单选,但您的示例小部件意味着多项选择。所以你的意图不是很清楚。使用下拉列表,您还可以通过键入首字母来选择选项。