Django - Form ModelForm BSModalModelForm 등 폼에서 request 객체 참조하기

너무 기본적이라 알고 있을 수 있지만, 불편했기에 정리해둠

Form, Modelform, BSModalModelForm 에서 request 객체를 직접 접근이 안되기에, 왜 안될까 보는 중에 __init__ 함수 호출시에 매개변수로 넘어온다는 것을 보니 그냥 그값을 저장해서 사용하자는 접근

 

코드를 보는 것이 낫겠다

 

class ProductProfileUpdateForm(BSModalModelForm, ProductProfileForm):
    # date = forms.DateField(
    #     error_messages = {
    #       'invalid': 'YYYY-MM-DD 입력'
    #     })
    title = ""
    is_admin = 0

    class Meta:
        model = ProductProfile
        fields = __all__

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        print("=== ProductProfileForm ===", args, kwargs)
        requestdata = kwargs.pop("request", None)
        print(requestdata)
        self.is_admin = requestdata.user.is_superuser
        print(self.is_admin)

 

init 함수에서 kwargs 를 찍어 보니깐,

 

=== ProductProfileForm === () {'initial': {}, 'prefix': None, 'instance': <ProductProfile: test111111>, 'request': <WSGIRequest: GET '/productprofile/36/update'>}

출력되는 변수중에 request 가 떡하니 자리를 잡고 있네. 

 

그럼 pop 으로 뽑아서 쓰면 되겟다 생각해서

 

user.is_superuser 값을 뽑아 보니 정상으로 동작.

 

끝.

깊이 들여다봐야 제대로 안다

Jan Krnc 님의 사진, 출처: Pexels