如何在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)