如何使用RadioSelect呈现Django表单而不会默认获得已检查的单选按钮?

amo*_*eba 17 django

在Django 1.2.1上我使用ModelForm并生成一个带有radiobuttons的表单:

class myModelForm(ModelForm):    
    class Meta:
        model = myModel
        widgets = {
            'choose': RadioSelect(),
        } 
Run Code Online (Sandbox Code Playgroud)


这会产生一个带有伪值的额外输入:

<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>
Run Code Online (Sandbox Code Playgroud)


我知道我可以通过设置默认值来摆脱自动生成的空输入字段:

myChoices = (
    ("1", "First choice"),("2", "Second choice"),("3", "Third choice"),
)    

class myModel(models.Model):
    choose = models.CharField(max_length=1, choices=myChoices, default=1...
Run Code Online (Sandbox Code Playgroud)


所以在这种情况下,选择第一个选择:

<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>
Run Code Online (Sandbox Code Playgroud)

但是如何在没有选中输入属性的情况下渲染表单?

(没有自动生成的)

Ara*_*yan 16

这是一种hacky解决方案,但我已经测试了它的工作原理:只需将字段的默认值设置为不是其中一个选项的值(我建议将其设置为None).渲染表单时,Django不会知道哪个输入标记为已选中,因此它将使所有输入都未被选中(不会抛出错误).并且存在默认意味着将不存在自动生成的输入字段.


all*_*aps 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(),
        }
Run Code Online (Sandbox Code Playgroud)