无法更改超级用户自己的 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)