【发布时间】:2019-02-04 16:37:09
【问题描述】:
解决这个问题的“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>
但是,我不能简单地在我的模板中生成它,因为单选选项没有公开。如果不将表单与模板紧密耦合,或者将所有表示逻辑放在表单类中,我看不到这样做的方法。解决这个问题的正确方法是什么?
编辑
我意识到上述问题可能只是一个晦涩难懂的问题,但我不确定我可以提供哪些其他信息来激励某人帮助我解决这个问题。我是一个比网页设计师更好的后端程序员,而且我一个人在这个项目上,所以也许是缺乏教育——我描述的只是糟糕的设计吗?我应该以不同的方式设计吗?我真的很愿意接受任何可以帮助我克服这个问题的建议。
编辑 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)
【问题讨论】:
-
你能告诉我们你的表单类的代码吗?
标签: python django django-forms