在Django 1.2.1上我正在使用ModelForm并使用radiobuttons生成一个表单:
class myModelForm(ModelForm):
class Meta:
model = myModel
widgets = {
'choose': RadioSelect(),
}
这会产生一个带有虚假值的额外输入:
<li><input type="radio" id="id_choose_0" value="" name="choose1" /> ---------</li>
<li><input type="radio" id="id_choose_1" value="1" name="choose1" /> First choice</li>
我知道我可以通过设置默认值来删除自动生成的空输入字段:
myChoices = (
("1", "First choice"),("2", "Second choice"),("3", "Third choice"),
)
class myModel(models.Model):
choose = models.CharField(max_length=1, choices=myChoices, default=1...
所以在这种情况下,选择第一个选择:
<li><input checked="checked" type="radio" id="id_choose_1" value="1" name="choose1" /> First choice</li>
<li><input type="radio" id="id_choose_2" value="2" name="choose2" /> Second choice</li>
(没有自动生成的)
答案 0 :(得分:14)
这是一种hacky解决方案,但我已经测试了它的工作原理:只需将字段的默认值设置为不是其中一个选项的值(我建议将其设置为None
) 。渲染表单时,Django不会知道哪个输入标记为已选中,因此它将使所有这些输入都未被选中(不会抛出错误)。并且存在默认意味着不会有自动生成的输入字段。
答案 1 :(得分:11)
在Django 1.6中(未在其他版本中测试),您只需要default=None
:
class myModel(models.Model):
choose = models.CharField(..., default=None)
class myModelForm(ModelForm):
class Meta:
model = myModel
widgets = {
'choose': RadioSelect(),
}
答案 2 :(得分:4)
之前的解决方案对我不起作用。
因此,我只是选择了第一个小部件的选择。
class myModelForm(ModelForm):
def __init__(self, *args, **kwargs):
super(ContactForm, self).__init__(*args, **kwargs)
self.fields['choose'].choices = self.fields['choose'].choices[1:]
class Meta:
model = myModel
widgets = {
'choose': RadioSelect(),
}