Подтвердить что ты не робот

Как визуализировать Django-форму с помощью RadioSelect, не получив по умолчанию проверенную радиостанцию?

В 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>

Но как я могу визуализировать свою форму без отмеченного входного атрибута?

(и без автогенерации)

4b9b3361

Ответ 1

Это своего рода хакерское решение, но я тестировал его на работу: просто установите для поля по умолчанию значение, которое не является одним из вариантов (я рекомендую установить его на None). При рендеринге формы Django не будет знать, какой ввод отмечать как отмеченный, поэтому он оставит все их непроверенными (не вызывая ошибки). И тот факт, что есть значение по умолчанию, не будет автоматически генерируемого поля ввода.

Ответ 2

В Django 1.6 (не тестировал его в других версиях) все, что вам нужно, это default=None:

class myModel(models.Model):
    choose = models.CharField(..., default=None)

class myModelForm(ModelForm):
    class Meta:
        model = myModel
        widgets = {
            'choose': RadioSelect(),
        }

Ответ 3

Предыдущее решение не сработало бы для меня.

Поэтому я просто разрежу первый выбор виджетов.

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(),
        }