Remove 'Hold down "Control" ...' message from help_text

When getting the help_text from a field where `many=True`, Django
appends 'Hold down "Control", or "Command" on a Mac, to select more than
one.' to the help_text. This makes some sense in Django's ModelForms,
but no sense in the API.
This commit is contained in:
Andy Freeland 2013-07-04 01:51:24 -04:00
parent 7c0019854b
commit 7d43f41e4a
3 changed files with 27 additions and 2 deletions

View File

@ -100,6 +100,19 @@ def humanize_strptime(format_string):
return format_string return format_string
def strip_multiple_choice_msg(help_text):
"""
Remove the 'Hold down "control" ...' message that is enforced in select
multiple fields.
See https://code.djangoproject.com/ticket/9321
"""
multiple_choice_msg = _(' Hold down "Control", or "Command" on a Mac, to select more than one.')
multiple_choice_msg = unicode(multiple_choice_msg)
return help_text.replace(multiple_choice_msg, '')
class Field(object): class Field(object):
read_only = True read_only = True
creation_counter = 0 creation_counter = 0
@ -122,7 +135,7 @@ class Field(object):
self.label = smart_text(label) self.label = smart_text(label)
if help_text is not None: if help_text is not None:
self.help_text = smart_text(help_text) self.help_text = strip_multiple_choice_msg(smart_text(help_text))
def initialize(self, parent, field_name): def initialize(self, parent, field_name):
""" """

View File

@ -52,7 +52,7 @@ class CallableDefaultValueModel(RESTFrameworkModel):
class ManyToManyModel(RESTFrameworkModel): class ManyToManyModel(RESTFrameworkModel):
rel = models.ManyToManyField(Anchor) rel = models.ManyToManyField(Anchor, help_text='Some help text.')
class ReadOnlyManyToManyModel(RESTFrameworkModel): class ReadOnlyManyToManyModel(RESTFrameworkModel):

View File

@ -1376,6 +1376,18 @@ class FieldLabelTest(TestCase):
self.assertEqual('Label', relations.HyperlinkedRelatedField(view_name='fake', label='Label', help_text='Help', many=True).label) self.assertEqual('Label', relations.HyperlinkedRelatedField(view_name='fake', label='Label', help_text='Help', many=True).label)
# Test for issue #961
class ManyFieldHelpTextTest(TestCase):
def test_help_text_no_hold_down_control_msg(self):
"""
Validate that help_text doesn't contain the 'Hold down "Control" ...'
message that Django appends to choice fields.
"""
rel_field = fields.Field(help_text=ManyToManyModel._meta.get_field('rel').help_text)
self.assertEqual('Some help text.', unicode(rel_field.help_text))
class AttributeMappingOnAutogeneratedFieldsTests(TestCase): class AttributeMappingOnAutogeneratedFieldsTests(TestCase):
def setUp(self): def setUp(self):