在Django 1.2.1上,我使用了ModelForm并生成了一个带有单选按钮的表单:
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>
但是如果没有选中的输入属性,我该如何呈现表单呢?
(并且没有自动生成的文件)
发布于 2010-07-17 14:50:26
这是一种老生常谈的解决方案,但我已经对其进行了测试:只需将字段的默认值设置为一个不在选项之列的值(我建议将其设置为None
)。在呈现表单时,Django不知道将哪个输入标记为选中,因此它将保留所有输入都未选中(不会抛出错误)。有默认值的事实意味着将不会有自动生成的输入域。
发布于 2014-01-31 08:55:08
在Django1.6(没有在其他版本中测试)中,你需要的只是default=None
class myModel(models.Model):
choose = models.CharField(..., default=None)
class myModelForm(ModelForm):
class Meta:
model = myModel
widgets = {
'choose': RadioSelect(),
}
发布于 2012-06-28 09:16:04
以前的解决方案对我不起作用。
因此,我只需要切出第一个小部件的选择。
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(),
}
https://stackoverflow.com/questions/3248887
复制相似问题