此过滤器作为django附带的自定义javascript小部件实现.承包商.管理
我想你可以通过在 Select 框上做个小改动来得到你想要的东西.筛选方法.我们可以使用这个技巧go 除您搜索的所有 node 中的重音和变音符号.
str.normalize('NFD').replace(/[\u0300-\u036f]/g, "");
来源:https://stackoverflow.com/a/37511463/1977847
例如,您可以将一些javascript添加到更改表单的管理模板中,以覆盖原始搜索过滤器.
https://docs.djangoproject.com/en/dev/ref/contrib/admin/#overriding-admin-templates
像这样的东西可能会起作用,扩展内置admin/change_form.html
.
{% extends 'admin/change_form.html' %}
{% block admin_change_form_document_ready %}
{{ block.super }}
<script>
if (window.SelectBox) {
window.SelectBox.filter = function(id, text) {
// lowercase and strip accents off search text
const tokens = text
.toLowerCase()
.normalize('NFD')
.replace(/[\u0300-\u036f]/g, "")
.split(/\s+/);
for (const node of SelectBox.cache[id]) {
node.displayed = 1;
// lowercase and strip accents off each node text in the filter list
const node_text = node.text
.toLowerCase()
.normalize('NFD')
.replace(/[\u0300-\u036f]/g, "");
for (const token of tokens) {
if (!node_text.includes(token)) {
node.displayed = 0;
break;
}
}
}
SelectBox.redisplay(id);
}
}
</script>
{% endblock %}
有其他方法可以将自定义javascript添加到管理站点,但这一种方法非常快速且脏.