Removed hard-coded help_text for ManyToManyFields that use a SelectMultiple widget
Per deprecation timeline; refs #9321.
This commit is contained in:
parent
918a16bc4c
commit
e80de93af6
|
@ -15,12 +15,12 @@ from django.forms.forms import DeclarativeFieldsMetaclass, BaseForm
|
|||
from django.forms.formsets import BaseFormSet, formset_factory
|
||||
from django.forms.utils import ErrorList
|
||||
from django.forms.widgets import (SelectMultiple, HiddenInput,
|
||||
MultipleHiddenInput, CheckboxSelectMultiple)
|
||||
MultipleHiddenInput)
|
||||
from django.utils import six
|
||||
from django.utils.deprecation import RemovedInDjango18Warning
|
||||
from django.utils.encoding import smart_text, force_text
|
||||
from django.utils.text import get_text_list, capfirst
|
||||
from django.utils.translation import ugettext_lazy as _, ugettext, string_concat
|
||||
from django.utils.translation import ugettext_lazy as _, ugettext
|
||||
|
||||
|
||||
__all__ = (
|
||||
|
@ -1196,10 +1196,6 @@ class ModelMultipleChoiceField(ModelChoiceField):
|
|||
super(ModelMultipleChoiceField, self).__init__(queryset, None,
|
||||
cache_choices, required, widget, label, initial, help_text,
|
||||
*args, **kwargs)
|
||||
# Remove this in Django 1.8
|
||||
if isinstance(self.widget, SelectMultiple) and not isinstance(self.widget, CheckboxSelectMultiple):
|
||||
msg = _('Hold down "Control", or "Command" on a Mac, to select more than one.')
|
||||
self.help_text = string_concat(self.help_text, ' ', msg)
|
||||
|
||||
def to_python(self, value):
|
||||
if not value:
|
||||
|
|
|
@ -19,7 +19,6 @@ from django.core.files.uploadedfile import SimpleUploadedFile
|
|||
from django.db.models import CharField, DateField
|
||||
from django.test import TestCase as DjangoTestCase
|
||||
from django.test import override_settings
|
||||
from django.utils import six
|
||||
from django.utils import translation
|
||||
|
||||
from . import models
|
||||
|
@ -169,17 +168,6 @@ class AdminFormfieldForDBFieldTests(TestCase):
|
|||
def testInheritance(self):
|
||||
self.assertFormfield(models.Album, 'backside_art', widgets.AdminFileWidget)
|
||||
|
||||
def test_m2m_widgets(self):
|
||||
"""m2m fields help text as it applies to admin app (#9321)."""
|
||||
class AdvisorAdmin(admin.ModelAdmin):
|
||||
filter_vertical = ['companies']
|
||||
|
||||
self.assertFormfield(models.Advisor, 'companies', widgets.FilteredSelectMultiple,
|
||||
filter_vertical=['companies'])
|
||||
ma = AdvisorAdmin(models.Advisor, admin.site)
|
||||
f = ma.formfield_for_dbfield(models.Advisor._meta.get_field('companies'), request=None)
|
||||
self.assertEqual(six.text_type(f.help_text), ' Hold down "Control", or "Command" on a Mac, to select more than one.')
|
||||
|
||||
|
||||
@override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',))
|
||||
class AdminFormfieldForDBFieldWithRequestTests(DjangoTestCase):
|
||||
|
|
|
@ -111,12 +111,12 @@ class ModelFormCallableModelDefault(TestCase):
|
|||
<option value="1" selected="selected">ChoiceOption 1</option>
|
||||
<option value="2">ChoiceOption 2</option>
|
||||
<option value="3">ChoiceOption 3</option>
|
||||
</select><input type="hidden" name="initial-multi_choice" value="1" id="initial-id_multi_choice_0" /> <span class="helptext"> Hold down "Control", or "Command" on a Mac, to select more than one.</span></p>
|
||||
</select><input type="hidden" name="initial-multi_choice" value="1" id="initial-id_multi_choice_0" /></p>
|
||||
<p><label for="id_multi_choice_int">Multi choice int:</label> <select multiple="multiple" name="multi_choice_int" id="id_multi_choice_int">
|
||||
<option value="1" selected="selected">ChoiceOption 1</option>
|
||||
<option value="2">ChoiceOption 2</option>
|
||||
<option value="3">ChoiceOption 3</option>
|
||||
</select><input type="hidden" name="initial-multi_choice_int" value="1" id="initial-id_multi_choice_int_0" /> <span class="helptext"> Hold down "Control", or "Command" on a Mac, to select more than one.</span></p>""")
|
||||
</select><input type="hidden" name="initial-multi_choice_int" value="1" id="initial-id_multi_choice_int_0" /></p>""")
|
||||
|
||||
def test_initial_instance_value(self):
|
||||
"Initial instances for model fields may also be instances (refs #7287)"
|
||||
|
@ -143,13 +143,13 @@ class ModelFormCallableModelDefault(TestCase):
|
|||
<option value="2" selected="selected">ChoiceOption 2</option>
|
||||
<option value="3" selected="selected">ChoiceOption 3</option>
|
||||
</select><input type="hidden" name="initial-multi_choice" value="2" id="initial-id_multi_choice_0" />
|
||||
<input type="hidden" name="initial-multi_choice" value="3" id="initial-id_multi_choice_1" /> <span class="helptext"> Hold down "Control", or "Command" on a Mac, to select more than one.</span></p>
|
||||
<input type="hidden" name="initial-multi_choice" value="3" id="initial-id_multi_choice_1" /></p>
|
||||
<p><label for="id_multi_choice_int">Multi choice int:</label> <select multiple="multiple" name="multi_choice_int" id="id_multi_choice_int">
|
||||
<option value="1">ChoiceOption 1</option>
|
||||
<option value="2" selected="selected">ChoiceOption 2</option>
|
||||
<option value="3" selected="selected">ChoiceOption 3</option>
|
||||
</select><input type="hidden" name="initial-multi_choice_int" value="2" id="initial-id_multi_choice_int_0" />
|
||||
<input type="hidden" name="initial-multi_choice_int" value="3" id="initial-id_multi_choice_int_1" /> <span class="helptext"> Hold down "Control", or "Command" on a Mac, to select more than one.</span></p>""")
|
||||
<input type="hidden" name="initial-multi_choice_int" value="3" id="initial-id_multi_choice_int_1" /></p>""")
|
||||
|
||||
|
||||
class FormsModelTestCase(TestCase):
|
||||
|
|
|
@ -369,11 +369,6 @@ class ColourfulItem(models.Model):
|
|||
colours = models.ManyToManyField(Colour)
|
||||
|
||||
|
||||
class ArticleStatusNote(models.Model):
|
||||
name = models.CharField(max_length=20)
|
||||
status = models.ManyToManyField(ArticleStatus)
|
||||
|
||||
|
||||
class CustomErrorMessage(models.Model):
|
||||
name1 = models.CharField(max_length=50,
|
||||
validators=[validators.validate_slug],
|
||||
|
|
|
@ -24,7 +24,7 @@ from .models import (Article, ArticleStatus, Author, Author1, BetterWriter, BigI
|
|||
DerivedBook, DerivedPost, Document, ExplicitPK, FilePathModel, FlexibleDatePost, Homepage,
|
||||
ImprovedArticle, ImprovedArticleWithParentLink, Inventory, Person, Post, Price,
|
||||
Product, Publication, TextFile, Triple, Writer, WriterProfile,
|
||||
Colour, ColourfulItem, ArticleStatusNote, DateTimePost, CustomErrorMessage,
|
||||
Colour, ColourfulItem, DateTimePost, CustomErrorMessage,
|
||||
test_images, StumpJoke, Character)
|
||||
|
||||
if test_images:
|
||||
|
@ -1004,7 +1004,7 @@ class ModelFormBasicTests(TestCase):
|
|||
<option value="%s" selected="selected">Entertainment</option>
|
||||
<option value="%s" selected="selected">It's a test</option>
|
||||
<option value="%s">Third test</option>
|
||||
</select> <span class="helptext"> Hold down "Control", or "Command" on a Mac, to select more than one.</span></li>
|
||||
</select></li>
|
||||
<li>Status: <select name="status">
|
||||
<option value="" selected="selected">---------</option>
|
||||
<option value="1">Draft</option>
|
||||
|
@ -1040,7 +1040,7 @@ class ModelFormBasicTests(TestCase):
|
|||
<option value="%s">Entertainment</option>
|
||||
<option value="%s">It's a test</option>
|
||||
<option value="%s">Third test</option>
|
||||
</select> <span class="helptext"> Hold down "Control", or "Command" on a Mac, to select more than one.</span></li>
|
||||
</select></li>
|
||||
<li>Status: <select name="status">
|
||||
<option value="" selected="selected">---------</option>
|
||||
<option value="1">Draft</option>
|
||||
|
@ -1084,7 +1084,7 @@ class ModelFormBasicTests(TestCase):
|
|||
<option value="%d" selected="selected">Entertainment</option>
|
||||
<option value="%d" selected="selected">It&39;s a test</option>
|
||||
<option value="%d">Third test</option>
|
||||
</select> <span class="helptext"> Hold down "Control", or "Command" on a Mac, to select more than one.</span></li>"""
|
||||
</select></li>"""
|
||||
% (self.c1.pk, self.c2.pk, self.c3.pk))
|
||||
|
||||
def test_basic_creation(self):
|
||||
|
@ -1147,7 +1147,7 @@ class ModelFormBasicTests(TestCase):
|
|||
<option value="%s">Entertainment</option>
|
||||
<option value="%s">It's a test</option>
|
||||
<option value="%s">Third test</option>
|
||||
</select><br /><span class="helptext"> Hold down "Control", or "Command" on a Mac, to select more than one.</span></td></tr>
|
||||
</select></td></tr>
|
||||
<tr><th>Status:</th><td><select name="status">
|
||||
<option value="" selected="selected">---------</option>
|
||||
<option value="1">Draft</option>
|
||||
|
@ -1175,7 +1175,7 @@ class ModelFormBasicTests(TestCase):
|
|||
<option value="%s" selected="selected">Entertainment</option>
|
||||
<option value="%s">It's a test</option>
|
||||
<option value="%s">Third test</option>
|
||||
</select> <span class="helptext"> Hold down "Control", or "Command" on a Mac, to select more than one.</span></li>
|
||||
</select></li>
|
||||
<li>Status: <select name="status">
|
||||
<option value="" selected="selected">---------</option>
|
||||
<option value="1">Draft</option>
|
||||
|
@ -1316,7 +1316,7 @@ class ModelFormBasicTests(TestCase):
|
|||
<option value="%s">Entertainment</option>
|
||||
<option value="%s">It's a test</option>
|
||||
<option value="%s">Third test</option>
|
||||
</select> <span class="helptext"> Hold down "Control", or "Command" on a Mac, to select more than one.</span></li>
|
||||
</select> </li>
|
||||
<li>Status: <select name="status">
|
||||
<option value="" selected="selected">---------</option>
|
||||
<option value="1">Draft</option>
|
||||
|
@ -1341,7 +1341,7 @@ class ModelFormBasicTests(TestCase):
|
|||
<option value="%s">It's a test</option>
|
||||
<option value="%s">Third test</option>
|
||||
<option value="%s">Fourth</option>
|
||||
</select> <span class="helptext"> Hold down "Control", or "Command" on a Mac, to select more than one.</span></li>
|
||||
</select></li>
|
||||
<li>Status: <select name="status">
|
||||
<option value="" selected="selected">---------</option>
|
||||
<option value="1">Draft</option>
|
||||
|
@ -2152,7 +2152,7 @@ class OtherModelFormTests(TestCase):
|
|||
"""<p><label for="id_name">Name:</label> <input id="id_name" type="text" name="name" maxlength="50" /></p>
|
||||
<p><label for="id_colours">Colours:</label> <select multiple="multiple" name="colours" id="id_colours">
|
||||
<option value="%(blue_pk)s">Blue</option>
|
||||
</select> <span class="helptext"> Hold down "Control", or "Command" on a Mac, to select more than one.</span></p>"""
|
||||
</select></p>"""
|
||||
% {'blue_pk': colour.pk})
|
||||
|
||||
|
||||
|
@ -2225,36 +2225,6 @@ class CustomCleanTests(TestCase):
|
|||
self.assertEqual(category.name, 'TEST')
|
||||
|
||||
|
||||
class M2mHelpTextTest(TestCase):
|
||||
"""Tests for ticket #9321."""
|
||||
def test_multiple_widgets(self):
|
||||
"""Help text of different widgets for ManyToManyFields model fields"""
|
||||
class StatusNoteForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = ArticleStatusNote
|
||||
fields = '__all__'
|
||||
|
||||
class StatusNoteCBM2mForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = ArticleStatusNote
|
||||
fields = '__all__'
|
||||
widgets = {'status': forms.CheckboxSelectMultiple}
|
||||
|
||||
dreaded_help_text = '<span class="helptext"> Hold down "Control", or "Command" on a Mac, to select more than one.</span>'
|
||||
|
||||
# Default widget (SelectMultiple):
|
||||
std_form = StatusNoteForm()
|
||||
self.assertInHTML(dreaded_help_text, std_form.as_p())
|
||||
|
||||
# Overridden widget (CheckboxSelectMultiple, a subclass of
|
||||
# SelectMultiple but with a UI that doesn't involve Control/Command
|
||||
# keystrokes to extend selection):
|
||||
form = StatusNoteCBM2mForm()
|
||||
html = form.as_p()
|
||||
self.assertInHTML('<ul id="id_status">', html)
|
||||
self.assertInHTML(dreaded_help_text, html, count=0)
|
||||
|
||||
|
||||
class ModelFormInheritanceTests(TestCase):
|
||||
def test_form_subclass_inheritance(self):
|
||||
class Form(forms.Form):
|
||||
|
|
Loading…
Reference in New Issue