无法更改超级用户自己的 django 管理内联
Cannot change superusers own django admin inline
我最近从 django 2.0.4 更新到 3.0.5。
我有一个具有以下内联的 UserAdmin:
class PreferencesInline(admin.StackedInline):
model = Preferences
can_delete = False
classes = ['collapse']
当我以超级用户身份登录时,我可以通过内联更改其他用户的首选项,但不能更改我自己的首选项。这是为什么?在我们的 django 2.0.4 服务器上,我既可以更改其他用户的首选项,也可以通过内联更改我自己的首选项。我找不到对这种奇怪行为的任何解释...
编辑 当我尝试直接在管理员中更改我的首选项时,同样的行为也适用,所以这不是内联的具体问题。
EDIT2 问题出在下面的中间件。有什么想法可以修改它来解决问题吗?
class UserLanguageMiddleware:
""" Middleware to set user language """
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
if request.user.is_authenticated:
user_language = request.user.profile.language
activate(user_language)
response = self.get_response(request)
return response
按照Django官方对explicity setting the active language的建议,问题得到解决:
settings.py:
LANGUAGE_COOKIE_NAME = 'language'
middleware.py:
class UserLanguageMiddleware:
""" Middleware to set user language cookie """
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
if request.user.is_authenticated and not request.COOKIES.get(settings.LANGUAGE_COOKIE_NAME):
# Set cookie
response.set_cookie(settings.LANGUAGE_COOKIE_NAME, request.user.profile.language)
elif not request.user.is_authenticated and request.COOKIES.get(settings.LANGUAGE_COOKIE_NAME):
# Delete cookie
response.delete_cookie(settings.LANGUAGE_COOKIE_NAME)
return response
models.py
from django.dispatch import receiver
from django.contrib.auth.signals import user_logged_in
# Update user language on login
@receiver(user_logged_in)
def post_login(sender, user, request, **kwargs):
user_language = user.profile.language
translation.activate(user_language)
我最近从 django 2.0.4 更新到 3.0.5。
我有一个具有以下内联的 UserAdmin:
class PreferencesInline(admin.StackedInline):
model = Preferences
can_delete = False
classes = ['collapse']
当我以超级用户身份登录时,我可以通过内联更改其他用户的首选项,但不能更改我自己的首选项。这是为什么?在我们的 django 2.0.4 服务器上,我既可以更改其他用户的首选项,也可以通过内联更改我自己的首选项。我找不到对这种奇怪行为的任何解释...
编辑 当我尝试直接在管理员中更改我的首选项时,同样的行为也适用,所以这不是内联的具体问题。
EDIT2 问题出在下面的中间件。有什么想法可以修改它来解决问题吗?
class UserLanguageMiddleware:
""" Middleware to set user language """
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
if request.user.is_authenticated:
user_language = request.user.profile.language
activate(user_language)
response = self.get_response(request)
return response
按照Django官方对explicity setting the active language的建议,问题得到解决:
settings.py:
LANGUAGE_COOKIE_NAME = 'language'
middleware.py:
class UserLanguageMiddleware:
""" Middleware to set user language cookie """
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
if request.user.is_authenticated and not request.COOKIES.get(settings.LANGUAGE_COOKIE_NAME):
# Set cookie
response.set_cookie(settings.LANGUAGE_COOKIE_NAME, request.user.profile.language)
elif not request.user.is_authenticated and request.COOKIES.get(settings.LANGUAGE_COOKIE_NAME):
# Delete cookie
response.delete_cookie(settings.LANGUAGE_COOKIE_NAME)
return response
models.py
from django.dispatch import receiver
from django.contrib.auth.signals import user_logged_in
# Update user language on login
@receiver(user_logged_in)
def post_login(sender, user, request, **kwargs):
user_language = user.profile.language
translation.activate(user_language)