Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Django中更改默认权限下的名称?_Django_Permissions - Fatal编程技术网

如何在Django中更改默认权限下的名称?

如何在Django中更改默认权限下的名称?,django,permissions,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 - Pu

帮助我更改我的应用程序的权限名称

我的应用程序的权限:

[] 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.覆盖权限的unicode方法: 替换权限类中的\uuuuUnicode\uuuuuu方法

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

如果要显式设置django管理部分的语言,请使用以下命令

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',
   ....

有一个简短但棘手的答案。我不建议这样做,也不反对这样做。但解决办法是: 编辑此路径的
path/to/django/contrib/contenttypes/models.py的
ContentType
类的
path/to/django/contrib/contenttypes/models.py的
app\u标签为\u name
函数,如下所示:

@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\u app\u config(model.\u meta.app\u label).verbose\u name
而不是
model.\u meta.app\u label
,因此它将使用与应用程序的
AppConfig
子类中为应用程序设置的任何用法相同的
verbose\u name

浏览器是否设置为英语?管理员后端将以您的浏览器设置为的任何语言显示。该路径可能存在于您的计算机上,但对于许多其他计算机,它将不存在。如果您想提供这样的解决方案,请提供一种可以使用子类/重写或monkey patching完成的方法。是的,您是对的,但建议每个人都为python创建一个虚拟环境来开发django,并且没有人可以在不安装django的情况下开发django。路径是相对的。@Melvyn您好,我提供了一个新的解决方案和一个完整的解决方案。你能过来告诉我这件事吗。看起来好多了。你没有在这里使用信号,但这是次要的。你可能应该处理,万一它已经注册了。
@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)