ChangeUserForm을 상속받아 CustomUserChangeForm을 만든다
class UserChangeForm(forms.ModelForm):
password = ReadOnlyPasswordHashField(
label=_("Password"),
help_text=_(
"Raw passwords are not stored, so there is no way to see this "
"user’s password, but you can change the password using "
'<a href="{}">this form</a>.'
),
)
class Meta:
model = User
fields = "__all__"
field_classes = {"username": UsernameField}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
password = self.fields.get("password")
if password:
password.help_text = password.help_text.format(
f"../../{self.instance.pk}/password/"
)
user_permissions = self.fields.get("user_permissions")
if user_permissions:
user_permissions.queryset = user_permissions.queryset.select_related(
"content_type"
)
UserChangeModel이 위와 같이 구성되어있고,
class CustomUserChangeForm(UserChangeForm):
class Meta:
"""현재 활성화 되어 쓰여지고 있는 유저를 항상 접근 할 수 있도록
장고가 제공한 함수를 사용"""
model = get_user_model()
fields = ["first_name",
"last_name",
"email",
]
원래는 위에 처럼 Meta클래스만 상속받아 회원정보 수정 폼을 만들었는데
비밀번호를 변경하기 위해 미리 구현해놓은 account/password의 경로로 바꾸어 주어야 했다
class CustomUserChangeForm(UserChangeForm):
password = ReadOnlyPasswordHashField(
# label=_("Password"),
help_text=(
'<a href="{}">비밀번호 변경하기</a>.'
),
)
class Meta:
"""현재 활성화 되어 쓰여지고 있는 유저를 항상 접근 할 수 있도록
장고가 제공한 함수를 사용"""
model = get_user_model()
fields = ["first_name",
"last_name",
"email",
]
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
password = self.fields.get("password")
if password:
password.help_text = password.help_text.format(
f"../../accounts/password/"
)
위와 같이 경로를 설정해주었지만
이렇게 수정한 경로로 가는 것이 아닌 부모 클래스의 경로로 가게 되는 문제가 발생하였다
class CustomUserChangeForm(UserChangeForm):
class Meta:
"""현재 활성화 되어 쓰여지고 있는 유저를 항상 접근 할 수 있도록
장고가 제공한 함수를 사용"""
model = get_user_model()
fields = ["first_name",
"last_name",
"email",
]
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
password = self.fields.get("password")
if password:
password_help_text = (
'<a href="{}">비밀번호 변경하기</a>.'
).format(
f"{reverse('accounts:change_password')}"
)
self.fields['password'].help_text = password_help_text
그래서 위와 같이 수정하여서
원하는 경로가 정상적으로 설정되는 것을 확인하였다
이동도 정상적으로 되고 비밀번호도 정상적으로 수정되는 것을 확인 할 수 있다
'[내일배움캠프]스파르타코딩클럽 AI 웹개발 > Today I Learned' 카테고리의 다른 글
[TIL] (0) | 2024.08.21 |
---|---|
[TIL] (0) | 2024.08.20 |
[TIL] (0) | 2024.08.18 |
[내일배움캠프 38일차 TIL] ERD (0) | 2024.08.14 |
[내일배움캠프 37일차 TIL] (0) | 2024.08.13 |