Что такое "djangoy" подход к этой проблеме:
В моем классе форм у меня есть forms.ChoiceField, виджет которого - forms.RadioSelect виджет, один из вариантов выбора которого должен быть представлен с помощью встроенного текстового ввода (который также является полем в форме). Я использую настраиваемую проверку, чтобы игнорировать текстовое поле, когда его выбор радио не выбран. При рендеринге я хочу, чтобы он выглядел, как показано ниже:
<ul>
<li><label for="id_rad_0"><input type="radio" id="id_rad_0" value="none" name="rad" /> No Textbox</label></li>
<li><label for="id_rad_1"><input type="radio" id="id_rad_1" value="one" name="rad" /> One Textbox: <input type="text" name="bar" id="id_bar" /></label></li>
</ul>
Однако я не могу просто создать это в моем шаблоне, потому что варианты радио не отображаются. Я не вижу способа сделать это без тесной привязки моей формы к моему шаблону или, наоборот, размещения всей логики представления в классе формы. Как правильный способ решить эту проблему?
edit
Я понимаю, что приведенное выше может быть лишь неясной проблемой, но я не уверен, какую еще информацию я могу предоставить по порядку чтобы вдохновить кого-нибудь помочь мне в этом. Я гораздо лучше бэкэнд-программист, чем веб-дизайнер, и я работаю в этом проекте один, так что, может быть, это недостаток образования - это то, что я описал просто плохим дизайном? Должен ли я просто спроектировать это по-другому? Я действительно открыт для любых предложений, которые помогут мне преодолеть это.
редактировать 2
По запросу, текущий код сокращен для сохранения здравомыслия, имена изменены для защиты невиновных:
# forms.py
from myapp.models import RatherComplicatedModel
from django import forms
class RatherComplicatedForm(forms.ModelForm):
#various and sundry code...
RADIO_CHOICES = (
('none', "No Textbox"),
('one', "One Textbox: "),
)
# although I've abbreviated the model, 'rad' does not appear in the model;
# it merely provides input to the un-provided clean function
rad = forms.ChoiceField(widget=forms.RadioSelect(),choices=RADIO_CHOICES)
class Meta:
model = RatherComplicatedModel
-
# models.py
from django.db import models
class RatherComplicatedModel(models.Model):
#some other stuff...
bar = models.IntegerField(blank=True,null=True)