Django 1.11模板无法正确呈现MultipleChoiceField,这与django 1.4一起使用

时间:2017-04-21 07:38:31

标签: django-forms django-1.11

我正在尝试将现有应用程序从1.4升级到1.11。 我有一个问题,其中MultipleChoiceField存储在数据库中,但模板不会将其作为被检查。

models.py

class TestModel(models.Model):
    test = models.CharField(blank=True, max_length=200)

forms.py

from django import forms
from django.forms import ModelForm
from app.models import TestModel
CHOICES = (
    ('1', 'Select All'),
    ('a', 'choice 1'),
    ('k', 'choice 2'),
)
class TestForm(ModelForm):
    test = forms.MultipleChoiceField(choices=CHOICES, required=False, widget=forms.CheckboxSelectMultiple()
    )
    class Meta:
        model = TestModel
        fields = '__all__' 

form1 = TestForm(data={'test': ['a','k']})

当我使用manage.py shell运行它时,我得到正确的HTML输出

print form1

<tr>
<th><label>Test:</label></th>
<td>
<ul id="id_test">
    <li>
    <label for="id_test_0"><input type="checkbox" name="test" value="1" id="id_test_0" onclick="selectAll(this);" />Select All</label>
    </li>
    <li>
    <label for="id_test_1"><input type="checkbox" name="test" value="a" checked id="id_test_1" onclick="selectAll(this);" />choice 1</label>
    </li>
    <li>
    <label for="id_test_2"><input type="checkbox" name="test" value="k" checked id="id_test_2" onclick="selectAll(this);" />choice 2</label>
    </li>
</ul>
</td>
</tr>   

您可以看到它在代码中具有checked属性。

模板

<div id="Scrolldrive2">{{form1.test}}</div> 

选中的复选框不会在UI上呈现。

1 个答案:

答案 0 :(得分:0)

问题是由于模型返回的初始数据是string

类型

例如。 form1 = TestForm(initial = {'test':u“[u'a',u'k']”})

Django 1.4可以在内部将数据转换为列表,这在1.11中没有发生.Have将初始数据转换为列表,现在它正常工作。

工作片段,它将“测试”字段数据呈现为列表类型,而不是form.py中的字符串类型

yourTextView.postDelayed(new Runnable() {
    @Override
    public void run() {
        width = yourTextView.getWidth();
    }
}, 300);