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

时间:2014-06-21 19:11:51

标签: django django-forms

这是我的群组邮件模型,该模型扩展了另一个模型Message,其中包含其他字段texttime等。

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

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

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

如何更改表单中组字段的帮助文本?任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:50)

对于 Django> = 1.6 docs):

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

答案 1 :(得分:15)

我使用了以下代码。

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

答案 2 :(得分:0)

有多种方法可以实现。

1)您可以在模型的字段定义中添加help_text,如Bobort在上面的评论中所述:

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

如果您希望此help_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',
        }

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

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 %}

help_text将为空,因为BoundField中的help_text在您自行设置之前已被填充。因此,解决方案是将self['employees'].help_text = 'Some text'添加到__init__或在模板中使用{{ field.field.help_text }}

在需要通过某些条件设置help_text的情况下(例如,是否将特定参数传递给表单初始化或其他方法),此解决方案很有用。

希望它将对某人有所帮助。