Расширенная форма молча терпит неудачу - PullRequest
1 голос
/ 19 января 2010

Я настроил одну из моих форм, и теперь она не проходит тест is_valid (). Нет формы. Ошибки не видны. Есть идеи, где я ошибся?

Форма:

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 })

Спасибо!

Ответы [ 2 ]

3 голосов
/ 19 января 2010

gruzczy имеет правильную идею, но лучший способ сделать это состоит в том, чтобы избежать изменения сигнатуры функции __init__.

def __init__(self, *args, **kwargs):
    self.userN = kwargs.pop('userN', None)
    super(SearchForm,self).__init__(*args,**kwargs)
    ...etc...
2 голосов
/ 19 января 2010

Это, вероятно, потому что вы передаете request.POST параметру userN. Если сначала у вас есть ключевое слово аргумент, это не значит, что request.POST будет автоматически помещен в аргументы - скорее наоборот, он будет помещен в userN. Попробуйте это:

form = SearchForm(False, request.POST)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...