2010-01-19 2 views
1

내 양식 중 하나를 사용자 정의했지만 이제는 is_valid() 테스트를 통과하지 못합니다. form.errors는 표시되지 않습니다. 내가 어디로 잘못 갔는지에 대한 아이디어가 있습니까?확장 된 양식 자동으로 실패 함

형태 :

class SearchForm(forms.Form): 
    param = forms.CharField(required=False, max_length = 500, label = 'Search for') 
    sets = forms.ModelMultipleChoiceField(queryset=Set.objects.all())  
    onlyDiffer = forms.BooleanField(required=False, label = 'Display varying only') 

    def __init__(self, userN = False, *args, **kwargs): 
     super(SearchForm,self).__init__(*args,**kwargs) 
     self.userN = userN 
     self.fields['sets'].queryset=Set.objects.filter(Q(owner = None) | Q(owner=self.userN)) 

보기 :

def search(request): 
    template = 'search.html' 
    if request.method == 'POST': 
     form = SearchForm(request.POST) 
     if form.is_valid(): 
      (..do search..) 
     else: 
      return direct_to_template(request, template, {'form' : SearchForm(), 'errors' : form.errors}) 
    else: 
     usr = request.user 
     form = SearchForm(usr) 
     return direct_to_template(request, template, { 'form': form }) 

감사합니다!

답변

3

gruzczy이 올바른 생각하지만 처음에 __init__의 함수 서명을 변경하는 것을 방지하는 것입니다 할 수있는 더 좋은 방법이있다.

def __init__(self, *args, **kwargs): 
    self.userN = kwargs.pop('userN', None) 
    super(SearchForm,self).__init__(*args,**kwargs) 
    ...etc... 
+1

네, 실제로 더 좋은 아이디어입니다. 나는 그저 게으르다. 오류가있는 곳에서 말하면서, 올바르게 만드는 방법이 아니라. – gruszczy

2

아마도 user.POST를 userN 매개 변수에 전달했기 때문일 수 있습니다. 키워드 인수가 처음이라면 그 요청을 의미하지는 않습니다 .POST가 자동으로 args에 삽입됩니다 .- 반대로 userN에 놓이게됩니다. 이 시도 :

form = SearchForm(False, request.POST)