Skip to content

Commit

Permalink
Merge pull request #483 from rpkilby/cripsy-filtersets
Browse files Browse the repository at this point in the history
Apply crispy layout to base DRF FilterSet
  • Loading branch information
Carlton Gibson committed Sep 14, 2016
2 parents bb03006 + e7bb7d9 commit 9d3a02e
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 34 deletions.
3 changes: 3 additions & 0 deletions django_filters/compat.py
@@ -1,5 +1,6 @@

import django
from django.conf import settings


# django-crispy-forms is optional
Expand All @@ -8,6 +9,8 @@
except ImportError:
crispy_forms = None

is_crispy = 'crispy_forms' in settings.INSTALLED_APPS and crispy_forms


def remote_field(field):
"""
Expand Down
37 changes: 3 additions & 34 deletions django_filters/rest_framework/backends.py
@@ -1,52 +1,21 @@

from __future__ import absolute_import

from django.conf import settings
from django.template import loader
from django.utils.translation import ugettext_lazy as _

from rest_framework import compat
from rest_framework.filters import BaseFilterBackend

from ..compat import crispy_forms
from .. import compat
from . import filterset


if 'crispy_forms' in settings.INSTALLED_APPS and crispy_forms:
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Submit

class FilterSet(filterset.FilterSet):
def __init__(self, *args, **kwargs):
super(FilterSet, self).__init__(*args, **kwargs)
for field in self.form.fields.values():
field.help_text = None

layout_components = list(self.form.fields.keys()) + [
Submit('', _('Submit'), css_class='btn-default'),
]

helper = FormHelper()
helper.form_method = 'GET'
helper.template_pack = 'bootstrap3'
helper.layout = Layout(*layout_components)

self.form.helper = helper

if compat.is_crispy:
filter_template = 'django_filters/rest_framework/crispy_form.html'

else:
class FilterSet(filterset.FilterSet):
def __init__(self, *args, **kwargs):
super(FilterSet, self).__init__(*args, **kwargs)
for field in self.form.fields.values():
field.help_text = None

filter_template = 'django_filters/rest_framework/form.html'


class DjangoFilterBackend(BaseFilterBackend):
default_filter_set = FilterSet
default_filter_set = filterset.FilterSet
template = filter_template

def get_filter_class(self, view, queryset=None):
Expand Down
20 changes: 20 additions & 0 deletions django_filters/rest_framework/filterset.py
Expand Up @@ -3,10 +3,16 @@
from copy import deepcopy

from django.db import models
from django.utils.translation import ugettext_lazy as _

from django_filters import filterset
from ..filters import BooleanFilter, IsoDateTimeFilter
from ..widgets import BooleanWidget
from .. import compat

if compat.is_crispy:
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Submit


FILTER_FOR_DBFIELD_DEFAULTS = deepcopy(filterset.FILTER_FOR_DBFIELD_DEFAULTS)
Expand All @@ -23,3 +29,17 @@

class FilterSet(filterset.FilterSet):
FILTER_DEFAULTS = FILTER_FOR_DBFIELD_DEFAULTS

def __init__(self, *args, **kwargs):
super(FilterSet, self).__init__(*args, **kwargs)

if compat.is_crispy:
layout_components = list(self.form.fields.keys()) + [
Submit('', _('Submit'), css_class='btn-default'),
]
helper = FormHelper()
helper.form_method = 'GET'
helper.template_pack = 'bootstrap3'
helper.layout = Layout(*layout_components)

self.form.helper = helper

0 comments on commit 9d3a02e

Please sign in to comment.