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

Sud*_*hra 21 django django-forms

这是我的一组消息模型延伸另一个模型Message,其具有一些其它字段,如text,time

class GroupMessage(Message):
    group = models.ForeignKey(Group, related_name='+')
Run Code Online (Sandbox Code Playgroud)

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

class GroupForm(ModelForm):
    class Meta:
        model = GroupMessage
Run Code Online (Sandbox Code Playgroud)

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

laf*_*ste 53

对于Django> = 1.6(docs):

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


Sud*_*hra 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.'
Run Code Online (Sandbox Code Playgroud)


ren*_*kse 6

有多种方法可以做到。

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

class GroupMessage(Message):
    group = models.ForeignKey(Group, related_name='+', help_text='Some text')
Run Code Online (Sandbox Code Playgroud)

如果您希望这个 help_text 保持不变,无论您使用什么 ModelForm,这种方式都很有用。例如,您可以为 GroupMessage 模型创建两个 ModelForm 表单,它们都将具有来自该模型的 help_text。

2)您可以像这样覆盖表单字段中的模型字段:

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

    class Meta:
        model = GroupMessage
Run Code Online (Sandbox Code Playgroud)

当您不仅需要更改 help_text 还需要更改标签或查询集或字段类型时,这种方式很有用。

3)你可以像上面那样

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

如果您只想更改一个或多个字段的 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'
Run Code Online (Sandbox Code Playgroud)

但是这个解决方案需要小的澄清。如果您将在这样的模板中使用此表单:

{% for field in form %}
    {{ field }}
    {{ field.help_text }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

没关系。但例如在以下情况下:

{% for field in form.visible_fields %}
    {{ field }}
    {{ field.help_text }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

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

当您想通过某些条件设置 help_text 时,此解决方案很有用,例如,如果将特定参数传递给表单初始化或其他内容。

希望它会帮助某人。