如何更改Django表单字段的帮助文本?

29

这是我为一个群组消息设计的模型,它扩展了另一个模型Message,该模型还有一些其他字段,如texttime等。

class GroupMessage(Message):
    group = models.ForeignKey(Group, related_name='+')

以下是我为这个模型创建的表单。

class GroupForm(ModelForm):
    class Meta:
        model = GroupMessage

我该如何更改表单中组字段的帮助文本?感谢您的任何帮助。


1
你是指标签吗?这里有一个类似的问题:https://dev59.com/bGzXa4cB1Zd3GeqPUHoL - 然而,它没有得到正确的回答! - David Avsajanishvili
2
请查看我的回答:https://dev59.com/bGzXa4cB1Zd3GeqPUHoL#24345173 - David Avsajanishvili
2
我从未这样做过,但是在fields.py中我看到了类似于help_text的东西。然后尝试一下,help_text='您的帮助信息'。顺便说一句,您不应该使用_作为类名。_用于保护方法/变量。 - Sławek Kabik
3个回答

72

对于 Django >= 1.6文档):

class GroupForm(ModelForm):
    class Meta:
        model = GroupMessage
        help_texts = {
            'group': 'Group to which this message belongs to',
        }

28

我用以下代码使其工作。

class _GroupMessageForm(ModelForm):

    class Meta:
        model = GroupMessage


class GroupMessageForm(_GroupMessageForm):

    def __init__(self, *args, **kwargs):
        super(_GroupMessageForm, self).__init__(*args, **kwargs)
        self.fields['employees'].help_text = '<br/>Hold down "Control" to select more.'

1
为了以后的参考,这个内容已经包含在文档中了:字段选项 - rnevius
1
不要在表单中使用help_text,而是将其添加到模型字段的定义中。这样,无论我们在哪个表单上使用该字段,都不会有问题。group = models.ForeignKey(Group, related_name='+', help_text='<br />按住“Ctrl”键选择多个选项。') - Bobort

8
There are multiple ways to do it. 有多种方法可以做到这一点。
1) 你可以在模型字段的定义中添加help_text,就像Bobort在上面的评论中说的那样:
class GroupMessage(Message):
    group = models.ForeignKey(Group, related_name='+', help_text='Some text')

如果您希望保持此帮助文本不变,无论使用哪个ModelForm,可以使用此方法。例如,您可以为GroupMessage模型创建两个ModelForm表单,它们都将具有来自该模型的help_text。

2)您可以在表单字段中覆盖模型字段,如下所示:

class GroupForm(ModelForm):
    group = forms.ModelChoseField(label='Group', help_text='Some text')

    class Meta:
        model = GroupMessage

这种方式在您需要更改的不仅是help_text,而是例如标签、查询集或字段类型时非常有用。
3) 您可以像上面的laffuste一样进行操作:
class GroupForm(ModelForm):
    class Meta:
        model = GroupMessage
        help_texts = {
            'group': 'Group to which this message belongs to',
        }

如果您只想更改一个或多个字段的帮助文本,则此方法很有用。

4)另一种方法类似于您所做的:

class GroupForm(ModelForm):
    class Meta:
        model = GroupMessage

    def __init__(self, *args, **kwargs):
        super(GroupForm, self).__init__(*args, **kwargs)
        self.fields['employees'].help_text = 'Some text'

但是这个解决方案需要进行一些澄清。如果您将在模板中使用此表单,就像这样:
{% for field in form %}
    {{ field }}
    {{ field.help_text }}
{% endfor %}

“这没问题。但是例如,在某些情况下:”
{% for field in form.visible_fields %}
    {{ field }}
    {{ field.help_text }}
{% endfor %}

因为BoundField中的help_text在你自己设置它之前就已经被填充,所以help_text将为空。因此解决方法是在__init__中添加self['employees'].help_text = 'Some text',或者在模板中使用{{ field.field.help_text }}

这个解决方案在需要按条件设置help_text的情况下非常有用,例如如果特定参数被传递给表单初始化或者其他情况下。

希望这会帮助某些人。


非常感谢您提供如此精彩和详尽的答案! - MikeN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接