gpt4 book ai didi

python - 为 RadioSelect 中的每个选项设置 help_text

转载 作者:太空狗 更新时间:2023-10-29 21:04:22 26 4
gpt4 key购买 nike

我可以在任何表单字段上设置 help_text 属性,但是是否可以在用于 RadioSelect() 的选项上设置 help_text 属性?

我正在寻找一种简洁的方式来在每个单选按钮下显示一些帮助信息。

下面是模型和表单的代码,我可以在带有标签、输入元素和帮助文本的模板中呈现名称属性。我还希望能够呈现带有标签(“成员(member)类型”)、单选按钮(“开放成员(member)”和“封闭成员(member)”)的 membership_type 属性,以及与每个单选元素关联的帮助文本(“任何人都可以加入此组”和“只有选定的成员可以加入此组”)。

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 }

最佳答案

@Rishabh 是正确的,但我会进一步详细说明,乍一看,这似乎不是解决方案,尽管它是;或者,至少,无需深入研究 Django 表单即可获得有用的效果。

元组的第二个元素出现在“标签”标签内 - 所以任何 '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>

简单的例子

诀窍是“标记安全”描述的内容,然后将您需要的内容填充到:

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.'))
)

复杂的例子

所以在这个例子中我们:

  1. 将选择组合成一个列表(任何 iterable 结构都可以)
  2. 将结构传递给表单的 init 以动态创建我们的单选按钮
  3. 使用comprehension list为每个单选选项创建扩展说明

数据结构:票是我自己的类,它们有属性:

  • tickets.code - 如机票代码
  • label - 简洁的简短描述
  • 帮助 - 更长的描述

但稍后会详细介绍。首先让我们创建一些实例:

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)

这可能发生在您的 View 代码中。现在看看 form

会发生什么
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()
)

关于python - 为 RadioSelect 中的每个选项设置 help_text,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2204696/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com