2012-03-15 2 views
6

새 질문 : views.py의 메소드에서 양식의 매개 변수를 허용해야하지만 문제가 발생합니다.django form : view.py에서 폼으로 매개 변수를 전달하면 오류가 발생 함

class WirelessScanForm(forms.ModelForm): 
    time = forms.DateTimeField(label="Schedule Time", widget=AdminSplitDateTime()) 

    def __init__(self,*args,**kwargs): 
     myClient = kwargs.pop("client")  # client is the parameter passed from views.py 
     super(WirelessScanForm, self).__init__(*args,**kwargs) 
     prob = forms.ChoiceField(label="Sniffer", choices=[ x.sniffer.plug_ip for x in Sniffer.objects.filter(client = myClient) ]) 

하지만 장고 나에게 말을 오류주고 유지 :

def scan_page(request): 
    myClient = request.user.get_profile().client 
    form = WirelessScanForm(client = myClient) # pass parameter to the form 

과 forms.py에서 나는 다음과 같은 형식을 정의

: TemplateSyntaxError: Caught NameError while rendering: name 'myClient' is not defined가 (이 오류가 발생 뷰에서 나는 다음 코드와 방법을 만들어 쿼리에서)

나는 여기가 어리석은 뭔가가 될까 두렵다. 그러나 나는 그 이유를 정말로 알 수 없다. 도와주세요, 고마워요.

+0

전체 추적을 게시하십시오. – jpic

+0

http://stackoverflow.com/questions/6993387/django-tables-caught-nameerror-while-rendering-global-name-name-is-not-defi –

답변

10

형식을 올바르게 수정했다고 가정하면 들여 쓰기 문제가 발생합니다. prob__init__ 밖에 있으므로 로컬 변수 myClient에 액세스 할 수 없습니다.

그러나 두 가지 다른 문제가 있으므로 메서드 내에서 가져 오면 여전히 작동하지 않습니다. 먼저 변수에 필드를 할당하면 양식에 설정되지 않습니다. 둘째, choices 속성에는 단순 목록이 아닌 2- 튜플의 목록이 필요합니다. 당신이 필요한 것은 이것이다 :

def __init__(self,*args,**kwargs): 
    myClient = kwargs.pop("client")  # client is the parameter passed from views.py 
    super(WirelessScanForm, self).__init__(*args,**kwargs) 
    self.fields['prob'] = forms.ChoiceField(label="Sniffer", choices=[(x.plug_ip, x.MY_DESCRIPTIVE_FIELD) for x in Sniffer.objects.filter(client = myClient)]) 

분명히 당신이 선택에 표시 할 실제 필드 MY_DESCRIPTIVE_FIELD를 교체합니다.

관련 문제