Вы не должны менять app_label, если у нет веских причин .
К сожалению, не существует поддерживаемого способа изменить имя приложения, которое будет отображаться в админке.
Сначала я проверил код администратора и заметил, что он использует строковый метод title () :
class AdminSite(object):
# snip ....
def index(self, request, extra_context=None):
# snip .....
app_dict[app_label] = {
'name': app_label.title(),
'app_url': reverse('admin:app_list', kwargs={'app_label': app_label}, current_app=self.name),
'has_module_perms': has_module_perms,
'models': [model_dict],
}
Таким образом, решением было бы установить app_label в строку с перегруженным методом заголовка, например, для использования такого перевода:
msgid "testapp"
msgstr "My test application"
У вас может быть такой взлом:
from django.utils.translation import ugettext_lazy as _
class TitleHack(str):
def title(self):
return _(self)
class Student(models.Model):
class Meta:
app_label = TitleHack(__package__)
Это довольно неприятно, и вы должны полностью понять этот код, прежде чем использовать его. Надеюсь, это не ракетостроение, но все еще не поддерживается.
Проблема в том, что по какой-то непонятной причине администратор не всегда полагается на title (), это на самом деле довольно противоречиво. Лучшее, что вы можете сделать, это переопределить шаблон администратора для приложения и жестко указать имя вашего приложения там.
Иначе, вам придется исправить имя в других частях администратора в python, и это довольно наглядно:
class HackedAppLabelAdmin(admin.ModelAdmin):
def render_change_form(self, request, context, add=False, change=False, form_url='', obj=None):
""" take care of app_label for add and change view """
context['app_label'] = self.model._meta.app_label.title()
return super(HackedAppLabelAdmin, self).render_change_form(request, context, add, change, form_url, obj)
def changelist_view(self, request, extra_context=None):
""" take care of the changelist view """
extra_context = extra_context or {}
extra_context['app_label'] = self.model._meta.app_label.title()
return super(HackedAppLabelAdmin, self).changelist_view(request, extra_context)
admin.site.register(Student, HackedAppLabelAdmin)