최근에 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)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다