Remove 'help_text', add verbose labels

This commit is contained in:
Ryan P Kilby 2016-06-28 17:25:45 -04:00
parent 269140d5d7
commit 22824cf6c6
5 changed files with 53 additions and 49 deletions

View File

@ -19,7 +19,7 @@ from .fields import (
Lookup, LookupTypeField, BaseCSVField, BaseRangeField, RangeField,
DateRangeField, DateTimeRangeField, TimeRangeField, IsoDateTimeField
)
from .utils import deprecate, pretty_name
from .utils import deprecate, label_for_filter, pretty_name
__all__ = [
@ -127,18 +127,24 @@ class Filter(object):
return locals()
lookup_type = property(**lookup_type())
def label():
def fget(self):
if self._label is None and hasattr(self, 'parent'):
model = self.parent._meta.model
self._label = label_for_filter(
model, self.name, self.lookup_expr, self.exclude
)
return self._label
def fset(self, value):
self._label = value
return locals()
label = property(**label())
@property
def field(self):
if not hasattr(self, '_field'):
help_text = self.extra.pop('help_text', None)
if help_text is None:
if self.exclude and settings.HELP_TEXT_EXCLUDE:
help_text = _('This is an exclusion filter')
elif not self.exclude and settings.HELP_TEXT_FILTER:
help_text = _('Filter')
else:
help_text = ''
if (self.lookup_expr is None or
isinstance(self.lookup_expr, (list, tuple))):
@ -162,11 +168,11 @@ class Filter(object):
self._field = LookupTypeField(self.field_class(
required=self.required, widget=self.widget, **self.extra),
lookup, required=self.required, label=self.label, help_text=help_text)
lookup, required=self.required, label=self.label)
else:
self._field = self.field_class(required=self.required,
label=self.label, widget=self.widget,
help_text=help_text, **self.extra)
**self.extra)
return self._field
def filter(self, qs, value):
@ -440,6 +446,7 @@ class BaseCSVFilter(Filter):
base_field_class = BaseCSVField
def __init__(self, *args, **kwargs):
kwargs.setdefault('help_text', _('Multiple values may be separated by commas.'))
super(BaseCSVFilter, self).__init__(*args, **kwargs)
class ConcreteCSVField(self.base_field_class, self.field_class):

View File

@ -433,8 +433,7 @@ class BaseFilterSet(object):
default = {
'name': name,
'label': capfirst(f.verbose_name),
'lookup_expr': lookup_expr
'lookup_expr': lookup_expr,
}
filter_class, params = cls.filter_for_lookup(f, lookup_type)
@ -454,7 +453,6 @@ class BaseFilterSet(object):
queryset = f.field.model._default_manager.all()
default = {
'name': name,
'label': capfirst(rel.related_name),
'queryset': queryset,
}
if rel.multiple:

View File

@ -336,12 +336,10 @@ class IntegrationTestFiltering(CommonFilteringTestCase):
<p>
<label for="id_decimal">Decimal:</label>
<input id="id_decimal" name="decimal" step="any" type="number" />
<span class="helptext">Filter</span>
</p>
<p>
<label for="id_date">Date:</label>
<input id="id_date" name="date" type="text" />
<span class="helptext">Filter</span>
</p>
<button type="submit" class="btn btn-primary">Submit</button>
</form>

View File

@ -7,7 +7,7 @@ import mock
import warnings
from django import forms
from django.test import TestCase, override_settings
from django.test import TestCase
from django_filters import filters, widgets
from django_filters.fields import (
@ -64,27 +64,6 @@ class FilterTests(TestCase):
f = Filter()
field = f.field
self.assertIsInstance(field, forms.Field)
self.assertEqual(field.help_text, 'Filter')
def test_field_with_exclusion(self):
f = Filter(exclude=True)
field = f.field
self.assertIsInstance(field, forms.Field)
self.assertEqual(field.help_text, 'This is an exclusion filter')
@override_settings(FILTERS_HELP_TEXT_FILTER=False)
def test_default_field_settings(self):
f = Filter()
field = f.field
self.assertIsInstance(field, forms.Field)
self.assertEqual(field.help_text, '')
@override_settings(FILTERS_HELP_TEXT_EXCLUDE=False)
def test_field_with_exclusion_settings(self):
f = Filter(exclude=True)
field = f.field
self.assertIsInstance(field, forms.Field)
self.assertEqual(field.help_text, '')
def test_field_with_single_lookup_expr(self):
f = Filter(lookup_expr='iexact')
@ -102,7 +81,6 @@ class FilterTests(TestCase):
f = Filter(lookup_expr=None, exclude=True)
field = f.field
self.assertIsInstance(field, LookupTypeField)
self.assertEqual(field.help_text, 'This is an exclusion filter')
def test_field_with_list_lookup_expr(self):
f = Filter(lookup_expr=('istartswith', 'iendswith'))
@ -119,8 +97,7 @@ class FilterTests(TestCase):
f.field
mocked.assert_called_once_with(required=False,
label='somelabel',
widget='somewidget',
help_text=mock.ANY)
widget='somewidget')
def test_field_extra_params(self):
with mock.patch.object(Filter, 'field_class',
@ -128,8 +105,8 @@ class FilterTests(TestCase):
f = Filter(someattr='someattr')
f.field
mocked.assert_called_once_with(required=mock.ANY,
label=mock.ANY, widget=mock.ANY,
help_text=mock.ANY,
label=mock.ANY,
widget=mock.ANY,
someattr='someattr')
def test_field_with_required_filter(self):
@ -137,8 +114,9 @@ class FilterTests(TestCase):
spec=['__call__']) as mocked:
f = Filter(required=True)
f.field
mocked.assert_called_once_with(required=True, label=mock.ANY,
widget=mock.ANY, help_text=mock.ANY)
mocked.assert_called_once_with(required=True,
label=mock.ANY,
widget=mock.ANY)
def test_filtering(self):
qs = mock.Mock(spec=['filter'])

View File

@ -78,7 +78,30 @@ class FilterSetFormTests(TestCase):
fields = ('title',)
f = F().form
self.assertEqual(f.fields['title'].help_text, "This is an exclusion filter")
self.assertEqual(f.fields['title'].label, "Exclude title")
def test_complex_form_fields(self):
class F(FilterSet):
username = CharFilter(label='Filter for users with username')
exclude_username = CharFilter(name='username', lookup_expr='iexact', exclude=True)
class Meta:
model = User
fields = {
'status': ['exact', 'lt', 'gt'],
'favorite_books__title': ['iexact', 'in'],
'manager_of__users__username': ['exact'],
}
fields = F().form.fields
self.assertEqual(fields['username'].label, 'Filter for users with username')
self.assertEqual(fields['exclude_username'].label, 'Exclude username')
self.assertEqual(fields['status'].label, 'Status')
self.assertEqual(fields['status__lt'].label, 'Status is less than')
self.assertEqual(fields['status__gt'].label, 'Status is greater than')
self.assertEqual(fields['favorite_books__title__iexact'].label, 'Favorite books title')
self.assertEqual(fields['favorite_books__title__in'].label, 'Favorite books title is in')
self.assertEqual(fields['manager_of__users__username'].label, 'Manager of users username')
def test_form_fields_using_widget(self):
class F(FilterSet):
@ -118,8 +141,8 @@ class FilterSetFormTests(TestCase):
fields = ('book_title',)
f = F().form
self.assertEqual(f.fields['book_title'].label, None)
self.assertEqual(f['book_title'].label, 'Book title')
self.assertEqual(f.fields['book_title'].label, "Title")
self.assertEqual(f['book_title'].label, "Title")
def test_form_field_with_manual_name_and_label(self):
class F(FilterSet):