2009-09-13 10 views
3

Django 폼에서 clean() 메소드를 오버라이드하고 있습니다. 클라이언트의 IP 주소에 액세스 할 수 있습니다 (바인딩 된 폼이라고 가정). 요청 개체에 대한 참조가 있으면 META ("REMOTE_ADDR")에서 쉽게 가져올 수 있습니다. 그러나 요청에 대한 참조가 없습니다.Django Forms clean() 메소드 - 클라이언트의 IP 주소가 필요합니다.

이 작업을 수행 할 수있는 방법에 어떤 아이디어?

답변

13

그래서 자신을 참고하십시오.

class MyModelForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     self.request = kwargs.pop('request', None) 
     super(MyModelForm, self).__init__(*args, **kwargs) 


    def clean(self): 
     ip_address = self.request['META']['REMOTE_ADDR'] 

하고보기

:

myform = MyModelForm(request.POST, request=request) 
+1

왜 팝업()가? 그것은 청결을위한 것입니까 (사용하지 않는 것들을 제거하십시오)? 또는 get()보다 더 효율적입니다. – orokusaki

+3

일반적으로 좋은 습관입니다. superclass 메소드가 실제로 * args와 ** kwargs를 받아 들일 수 없다는 것은 가능하다 - 그것의 정의에는 이름 지정된 인수 만있을 수있다. 그렇다면 예상치 못한'request' 인수를 전달하면 예외가 발생합니다. –

관련 문제