我可以在任何表单字段上设置help_text属性,但是可以在用于RadioSelect()的选项上设置help_text吗?
我正在寻找一种干净的方式来显示每个单选按钮下的一些帮助信息。
下面是模型和表单的代码,我可以使用标签,输入元素和帮助文本在模板中呈现name属性。我还希望能够使用标签('会员类型'),单选按钮('开放会员资格'和'封闭会员资格')以及与每个广播元素相关联的帮助文本呈现membership_type属性('任何人都可以加入此group'和'only select members可以加入此组')。
class Group(models.Model):
MEMBERSHIP_CHOICES = (
('O', 'Open membership'),
('C', 'Closed membership'),
)
name = models.CharField(max_length=255)
membership_type = models.CharField(max_length=1, choices=MEMBERSHIP_CHOICES, default="O")
class GroupForm(forms.ModelForm):
name = forms.CharField(label="Group name", help_text="Enter a name for your new group")
class Meta:
model = Group
widgets = { "membership_type": forms.RadioSelect }
答案 0 :(得分:6)
@Rishabh是正确的但我会进一步详细说明,乍一看,它似乎不是解决方案,尽管它是;或者,至少,它可以被克服以获得有用的效果,而不必深入django形式。
元组的第二个元素显示在“label”标签内 - 所以任何'inline elements'都是允许的;例如:
或类似的东西
<ul>
<li><label for="id_ticket_0">
<input type="radio" id="id_ticket_0" value="PARTTIME" name="ticket">
<em>Part Time</em> Valid on Friday Night and Saturday Only
</label></li>
<li><label for="id_ticket_1">
<input type="radio" id="id_ticket_1" value="DAYTIME" name="ticket">
<em>Casual</em> Valid on Saturday Only
</label></li>
<li><label for="id_ticket_2">
<input type="radio" id="id_ticket_2" value="EARLYBIRD" name="ticket">
<em>Early Bird</em> Valid on Friday, Saturday, and Sunday. $15 discount for booking before 1am January 3rd, 2011
</label></li>
</ul>
诀窍是“mark_safe”描述的内容然后填写你需要的东西:
from django.utils.safestring import mark_safe
choices = (
('1', mark_safe(u'<em>One</em> | This is the first option. It is awesome')),
('2', mark_safe(u'<em>Two</em> | This is the second option. Good too.'))
)
所以在这个例子中我们:
数据结构: 门票是我自己的课程,它们有属性:
但稍后会有更多相关内容。首先让我们创建一些实例:
from mymodule import ticket
# so lets create a few
fulltime = ticket('FULLTIME',160,'Full Time',
"Valid Monday to Friday inclusive")
parttime = ticket('PARTTIME',110,'Full Time',
"Valid outside of business hours only")
daytime = ticket('DAYTIME',70,'Day Time',
"Valid only on weekends and public holidays")
# and put them together in a list any way you like
available_tickets = [fulltime, parttime, daytime]
# now create the form
OrderForm(tickets=available_tickets)
这可能发生在您的视图代码中。现在看看表单中发生了什么
class OrderForm(ModelForm):
def __init__(self, *args, **kwargs):
self.tickets = kwargs.pop('tickets')
super(OrderForm, self).__init__(*args, **kwargs)
choices = [(t.code, mark_safe(u'<em>%s</em> %s' % (t.label, t.help)))
for t in self.tickets]
self.fields['ticket'] = forms.ChoiceField(
choices = choices,
widget = forms.RadioSelect()
)
答案 1 :(得分:0)
假设您使用RadioSelect
作为forms.ChoiceField
的小部件,您可以执行以下操作:
choices = (('1', 'First help_text here'),
('2', 'Second help_text here'),
('3', 'Third help_text here'),
)
class MyForm(forms.Form):
...
choice = forms.ChoiceField(widget = RadioSelect, choices = choices)
这不是对help_text
的严格使用,但它应该在大多数情况下完成工作。