在Django admin.py
中class TableAdmin(admin.ModelAdmin):
search_fields = ["name", "description", "category"]
list_display = ["name", "description", "category"]
admin.site.register(Table, TableAdmin)
在这里,我们可以使用下面的代码
更改list_display,标签名称name.short_description = "Product Name"
现在问题是,如何更改搜索字段标签名称?
答案 0 :(得分:2)
您可以覆盖django管理模板的search_form.html
文件。
为其创建一个新的html文件similar,并将其命名为search_form.html
:
{% load i18n static %}
{% if cl.search_fields %}
<div id="toolbar"><form id="changelist-search" method="get">
<div><!-- DIV needed for valid HTML -->
<label for="searchbar"><img src="{% static "admin/img/search.svg" %}" alt="Search" /></label>
<input type="text" size="40" name="{{ search_var }}" value="{{ cl.query }}" id="searchbar" autofocus />
<input type="submit" value="{% trans 'My Search' %}" />
{% if show_result_count %}
<span class="small quiet">{% blocktrans count counter=cl.result_count %}{{ counter }} result{% plural %}{{ counter }} results{% endblocktrans %} (<a href="?{% if cl.is_popup %}_popup=1{% endif %}">{% if cl.show_full_result_count %}{% blocktrans with full_result_count=cl.full_result_count %}{{ full_result_count }} total{% endblocktrans %}{% else %}{% trans "Show all" %}{% endif %}</a>)</span>
{% endif %}
{% for pair in cl.params.items %}
{% if pair.0 != search_var %}<input type="hidden" name="{{ pair.0 }}" value="{{ pair.1 }}"/>{% endif %}
{% endfor %}
</div>
</form></div>
{%endif %}
然后将其放在模板目录的管理文件夹中,如:
(template directory)>admin>search_form.html
它应该覆盖搜索按钮的标签,并带有文字&#39;我的搜索&#39;
答案 1 :(得分:0)
是否可以仅针对特定管理模型覆盖它?是的,这是可能的。
为此,您需要创建以下文件。
YourApp
-> templatetags
-> __init__.py
-> custom_tags.py
-> admin_overrides
-> InclusionAdminNode
现在您必须注册一个自定义标签)来呈现搜索表单。
from django.contrib.admin.views.main import (
SEARCH_VAR,
)
from django.template import Library
from ..admin_overrides.InclusionAdminNode import InclusionAdminNode
register = Library()
def search_form(cl):
"""
Display a search form for searching the list.
"""
return {
'cl': cl,
'show_result_count': cl.result_count != cl.full_result_count,
'search_var': SEARCH_VAR
}
@register.tag(name='search_custom_form')
def search_form_tag(parser, token):
return InclusionAdminNode(parser, token, func=search_form, template_name='custom_search_form.html',
takes_context=False)
现在,我们必须在 YourApp/change_list.html
中使用这个标签。
{% block search %}{% search_custom_form cl %}{% endblock %}
注意:现在您仍然会看到表单没有变化。但这是我们必须添加自定义 InclusionAdminNode 并更改模板路径的问题。默认情况下,它从 admin
中选择。
from inspect import getfullargspec
from django.template.library import InclusionNode, parse_bits
class InclusionAdminNode(InclusionNode):
"""
Template tag that allows its template to be overridden per model, per app,
or globally.
"""
def __init__(self, parser, token, func, template_name, takes_context=True):
self.template_name = template_name
params, varargs, varkw, defaults, kwonly, kwonly_defaults, _ = getfullargspec(func)
bits = token.split_contents()
args, kwargs = parse_bits(
parser, bits[1:], params, varargs, varkw, defaults, kwonly,
kwonly_defaults, takes_context, bits[0],
)
super().__init__(func, takes_context, args, kwargs, filename=None)
def render(self, context):
opts = context['opts']
app_label = opts.app_label.lower()
object_name = opts.object_name.lower()
# Load template for this render call. (Setting self.filename isn't
# thread-safe.)
context.render_context[self] = context.template.engine.select_template([
'YourApp/%s/%s/%s' % (app_label, object_name, self.template_name),
'YourApp/%s/%s' % (app_label, self.template_name),
'YourApp/%s' % (self.template_name,),
])
return super().render(context)
我们现在可以走了。
希望对您有所帮助。