2016-09-11 2 views
0

다음 양식을 가지고 있으며 아래쪽에서 볼 수있는 것처럼 "self.currentSelectedTeam1"을 team1의 초기 값으로 사용할 수 없습니다. 나는 이것을 시도 할 때 나는 다음과 같은 오류가 발생합니다 :Django Form - Passing Values ​​

team1 = forms.ModelChoiceField(queryset=StraightredTeam.objects.none(), empty_label=None,initial=self.curentSelectedTeam1) 
NameError: name 'self' is not defined 

형태 : 어떤 도움, 앨런 사전에

class SelectTwoTeams(BootstrapForm): 

    def __init__(self, *args, **kwargs): 
     user = kwargs.pop('user', None) 
     self.curentSelectedTeam1 = kwargs.pop('curentSelectedTeam1', None) 
     self.curentSelectedTeam2 = kwargs.pop('curentSelectedTeam2', None) 
     super(SelectTwoTeams, self).__init__(*args, **kwargs) 
     queryset = StraightredTeam.objects.filter(currentteam = 1) 

     self.fields['team1'].queryset = queryset 
     self.fields['team2'].queryset = queryset 

    team1 = forms.ModelChoiceField(queryset=StraightredTeam.objects.none(), empty_label=None,initial=self.curentSelectedTeam1) 
    team2 = forms.ModelChoiceField(queryset=StraightredTeam.objects.none(), empty_label=None,initial=self.curentSelectedTeam2) 

많은 감사합니다.

답변

2

문제는 팀 1 및 팀 2 변수의 self 키워드에 있습니다. 것은 그들이 클래스 수준에있는, 그리고 자기

는 당신이 self.fields['team1'].queryset와 동일한 기능을 수행 할 필요가 작동하게하려면 (정적 메서드와 클래스 메소드 제외하고, 메소드 내부) 인스턴스 레벨로 볼 수 있습니다 :

self.fields['team1'].initial = self.curentSelectedTeam1 

내부 __init__ 방법.

+0

신속하고 깨끗한 응답에 많은 감사드립니다. –

2

__init__이 인스턴스 멤버이기 때문에 필드 team1team2이 만들어지기 때문에이 작업이 수행되지 않습니다.

즉, self.curentSelectedTeam1self.curentSelectedTeam2은 아직 사용 가능하지 않으며 대부분 None입니다.

양식에 초기 값을 설정하려면 양식 자체를 인스턴스화 할 때 필요합니다.

team1_pk = 0 
team2_pk = 1 

form = SelectTwoTeams(initial={'curentSelectedTeam1': team1_pk, 'curentSelectedTeam2': team2_pk}) 

당신은 당신의 현재 __init__ 재정의를 제거하거나 초기 값은 폼의 기본 생성자에 전달 될 수 있도록 super() 전화 중 하나를해야합니다.

+0

죄송합니다. 정답을 수여 할 수 없습니다. 둘 다 완벽하게 작동했고 도움을 주셔서 감사합니다. 많은 고마워, 앨런. –