Django BooleanField продолжает возвращать False (пусто) независимо от того, отмечен или нет - PullRequest
2 голосов
/ 28 ноября 2011

Как указано в названии. BooleanField не вернет True, даже если проверено. Этот сводит меня с ума!

Сначала я получаю флажки на основе списка идентификаторов полей на основе модели.

forms.py

class MyForm(forms.Form):
    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        fields = Fields.objects.all()
        for field in fields:
            field_name = field.ID
            self.fields[field_name] = forms.BooleanField(required=False, widget=forms.CheckboxInput(attrs={'class':'checkbox-small'}), label=field_name)

Обработчик никогда не возвращает True, даже если установлен в DOM.

models.py

def myFormHandler(request):
    siteDictionary = getDictionary(request)
    if request.method == 'POST':
        form = MyForm(request.POST, error_class=DivErrorList, auto_id='%s')
        if form.is_valid():
            fields = Fields.objects.all()
            for field in fields:
                if form.cleaned_data[field.ID]:
                    print "Finally returned true!"
    else:
        form = MyForm()
        siteDictionary['form'] = form
    return render_to_response('page.html', siteDictionary, context_instance=RequestContext(request))

Есть идеи? Спасибо за вашу помощь.

РЕДАКТИРОВАТЬ Вот шаблон

<table cellspacing="0" cellpadding="0" border="0" class="table-all">
    <thead>
        <tr>
            <th><input type="checkbox" name="check" class="checkall checkbox-small" /></th>
            <th>Name</th>
        </tr>
    </thead>
    <tbody>
    {% for field in form %}
        <tr>
            <td>{{ field }}</td>
            <td>{{ field.label }}</td>
        </tr>
    {% endfor %}
    </tbody>
</table>

<div id="pager" class="pager">
<form method="post" action=".">{% csrf_token %}
        <button type="submit" class="green"><span>Submit</span></button>
</form>
</div>

Ответы [ 2 ]

2 голосов
/ 28 ноября 2011

Ваши поля не находятся внутри вашего элемента формы HTML, поэтому не отправляются.

0 голосов
/ 28 ноября 2011

Является ли field.ID целым числом?Если это так, вам нужно привести его к строке при генерации field_name.

class MyForm(forms.Form):
    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        fields = Fields.objects.all()
        for field in fields:
            field_name = str(field.ID)
            self.fields[field_name] = forms.BooleanField(required=False, widget=forms.CheckboxInput(attrs={'class':'checkbox-small'}), label=field_name)
...