管理页面的其他 CSS 样式和 JS 脚本

假设你有一个简单的 Customer 模型:

class Customer(models.Model):
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)
    is_premium = models.BooleanField(default=False)

你在 Django 管理员中注册它并通过 first_namelast_name 添加搜索字段:

@admin.register(Customer)
class CustomerAdmin(admin.ModelAdmin):
    list_display = ['first_name', 'last_name', 'is_premium']
    search_fields = ['first_name', 'last_name']

执行此操作后,搜索字段将显示在管理列表页面中,并带有默认占位符:“ keyword ”。但是,如果你想将该占位符更改为按名称搜索,该怎么办?

你可以通过将自定义 Javascript 文件传递到 admin Media 来执行此操作:

@admin.register(Customer)
class CustomerAdmin(admin.ModelAdmin):
    list_display = ['first_name', 'last_name', 'is_premium']
    search_fields = ['first_name', 'last_name']
    
    class Media:
        #this path may be any you want, 
        #just put it in your static folder
        js = ('js/admin/placeholder.js', )

你可以使用浏览器调试工具栏查找 Django 设置到此搜索栏的 ID 或类,然后编写你的 js 代码:

$(function () {
   $('#searchbar').attr('placeholder', 'Search by name')
})

另外 Media 类允许你用字典对象添加 css 文件:

class Media:
    css = {
        'all': ('css/admin/styles.css',)
         }

例如,我们需要以特定颜色显示 first_name 列的每个元素。
默认情况下,Django 为 list_display 中的每个项目创建表格列,所有 <td> 标签都将具有类似 field-'list_display_name'的 css 类,在我们的例子中它将是 field_first_name

.field_first_name {
     background-color: #e6f2ff;
 }

如果要通过添加 JS 或某些 css 样式来自定义其他行为,则可以始终在浏览器调试工具中检查 id 和元素类。