How to change help text of a django form field?
I got it working with following code.
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.'
For Django >= 1.6 (docs):
class GroupForm(ModelForm):
class Meta:
model = GroupMessage
help_texts = {
'group': 'Group to which this message belongs to',
}
There are multiple ways to do it.
1) You can add help_text to definition of the field in the Model, as Bobort said in the comment above:
class GroupMessage(Message):
group = models.ForeignKey(Group, related_name='+', help_text='Some text')
This way is useful if you want this help_text stay the same, no matter what ModelForm you use. For example you can create two ModelForm forms for GroupMessage model and they both will have help_text from this model.
2) You can override model field in form field like that:
class GroupForm(ModelForm):
group = forms.ModelChoseField(label='Group', help_text='Some text')
class Meta:
model = GroupMessage
Such way is useful when you need to change not only help_text but for example label or queryset or type of field.
3) You can do it as laffuste above:
class GroupForm(ModelForm):
class Meta:
model = GroupMessage
help_texts = {
'group': 'Group to which this message belongs to',
}
This way is useful if you only want to change help_text for one or more fields.
4) And another way to do it is something like you did:
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'
But this solution needs small clarification. If you will use this form in template like that:
{% for field in form %}
{{ field }}
{{ field.help_text }}
{% endfor %}
It's fine. But for example in case:
{% for field in form.visible_fields %}
{{ field }}
{{ field.help_text }}
{% endfor %}
help_text will be empty, because help_text in BoundField was filled before you set it by yourself. So solution will be to add self['employees'].help_text = 'Some text'
to __init__
or to use {{ field.field.help_text }}
in template.
This solution is useful in cases when you want to set help_text by some conditions, for example if specific argument was passed to form initialization or something else.
Hope it will help someone.