Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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 admin内联_Django_Django Admin - Fatal编程技术网

无法更改超级用户自己的django admin内联

无法更改超级用户自己的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的服务器上,我既可以更改其他用

我最近从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的官方建议,问题得以解决:

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是问题所在?通过禁用它,问题就消失了。通过再次激活它,问题又出现了。