본문 바로가기

[내일배움캠프]스파르타코딩클럽 AI 웹개발/Today I Learned

[TIL]

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