无法更改超级用户自己的django admin内联
我最近从django 2.0.4更新到了3.0.5 我有一个具有以下内联功能的UserAdmin:无法更改超级用户自己的django admin内联,django,django-admin,Django,Django Admin,我最近从django 2.0.4更新到了3.0.5 我有一个具有以下内联功能的UserAdmin: class PreferencesInline(admin.StackedInline): model = Preferences can_delete = False classes = ['collapse'] 当我以超级用户身份登录时,我可以通过内联更改其他用户的首选项,但不能更改我自己的首选项。为什么呢?在使用django 2.0.4的服务器上,我既可以更改其他用
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的官方建议,问题得以解决: 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的官方建议,问题得以解决: 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)
您具体看到了什么?我得到了默认的成功消息:“用户“用户名”已成功更改。您可以在下面再次编辑它。'但是对文本输入或内联复选框的更改都不会保存。顺便说一句:更改也会正确显示在更改历史记录中,但不会保存。另请参阅我上面的编辑。您如何知道UserLanguageMiddleware是问题所在?通过禁用它,问题就消失了。通过再次激活,问题又出现了。您具体看到了什么?我得到了默认的成功消息:“用户“用户名”已成功更改。您可以在下面再次编辑它。'但是对文本输入或内联复选框的更改都不会保存。顺便说一句:更改也会正确显示在更改历史记录中,但不会保存。另请参阅我上面的编辑。您如何知道UserLanguageMiddleware是问题所在?通过禁用它,问题就消失了。通过再次激活它,问题又出现了。