繁体   English   中英

如何在Django管理员中更改默认小部件?

[英]How to change a default widget in the Django admin?

我正在为我的项目使用自动生成的Django admin。 结果如下:

结果

对于字段“教授”,Django自动生成一个下拉列表,但其中至少包含1000个元素。 因此,我想用更用户友好的名称替换列表,例如用于“裁判员”的小部件,您基本上只键入名称的首字母,然后在下面显示元素。

如何修改admin.py或models.py文件以获得该结果?

您可以尝试将字段添加到admin.py中的raw_id字段中:

class YourModelAdmin(admin.ModelAdmin):
    raw_id_fields=('professor', )

admin.site.register(YourModel, YourModelAdmin)

为此,您将获得一个漂亮的搜索按钮

您只需要选择一位教授还是多位教授? 之所以生成下拉列表,是因为您在模型中使用了professor = models.ForeignKey(Professor)类的东西。 ForeignKey表示单个选择,但您的示例小部件表示多个选择。 因此,您的意图不是很清楚。 在下拉列表中,您还可以通过输入首字母来选择选项。

您正在寻找:

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},
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM