如何在Django中默认更改名称?

时间:2014-05-02 02:39:20

标签: django permissions

帮我更改应用的权限名称

我的应用的权限:

[] articles | article | Can add article
[] articles | article | Can change article
[] articles | article | Can delete article

我希望获得西班牙语权限的名称

Articulo - Puede cambiar articulo
Articulo - Puede eliminar artículo
Articulo - Puede crear articulo

修改

我有两个选项:

1。创建中间件AdminLocaleURLMiddleware

2。覆盖Permission的unicode方法:

from django.utils import six
def permissions_new_unicode(self):
    nombre_clase = six.text_type(self.content_type)
    nombre_permiso = six.text_type(self.name)
    if 'Can delete' in nombre_permiso:
        nombre_permiso = nombre_permiso.replace('Can delete', 'Puede eliminar')
    elif 'Can add' in nombre_permiso:
        nombre_permiso = nombre_permiso.replace('Can add', 'Puede crear')
    elif 'Can change' in nombre_permiso:
        nombre_permiso = nombre_permiso.replace('Can change', 'Puede modificar')

    return u'%s - %s' % ( nombre_clase.title(), nombre_permiso)

替换Permission Class中的__unicode__方法

from django.contrib.auth.models import Permission
Permission.__unicode__ = permissions_new_unicode

2 个答案:

答案 0 :(得分:1)

如果您想为django admin部分明确设置语言,请使用此

from django.conf import settings
from django.utils import translation


    class AdminLocaleURLMiddleware:

        def process_request(self, request):
            if request.path.startswith('/admin'):
                request.LANG = getattr(settings, 'ADMIN_LANGUAGE_CODE', settings.LANGUAGE_CODE)
                translation.activate(request.LANG)
                request.LANGUAGE_CODE = request.LANG

然后放在settings.py中的某处:

ADMIN_LANGUAGE_CODE='es'

并添加中间件:

MIDDLEWARE_CLASSES = (
   ...
    'utils.multilang.middleware.AdminLocaleURLMiddleware',
   ....

答案 1 :(得分:0)

有简短但棘手的答案。我不建议这样做,也不拒绝这样做。但解决方案是: 编辑此路径的 app_labeled_name 修饰的 property 函数:path/to/django/contrib/contenttypes/models.py 类的 ContentType,变成这样:

@property
def app_labeled_name(self):
    model = self.model_class()
    if not model:
        return self.model
    return '%s | %s' % (apps.get_app_config(model._meta.app_label).verbose_name,
                        model._meta.verbose_name)

诀窍是使用 apps.get_app_config(model._meta.app_label).verbose_name 而不是 model._meta.app_label,因此它将使用与您应用的 verbose_name 子类中为您的应用设置的任何使用相同的 AppConfig .