Skip to content

Commit

Permalink
Merge pull request #10 from blueicepl/master
Browse files Browse the repository at this point in the history
Better detection of selected format.
  • Loading branch information
izimobil committed May 23, 2018
2 parents 9df956f + d00d287 commit f91b31d
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 4 deletions.
2 changes: 1 addition & 1 deletion rest_framework_datatables/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class DatatablesFilterBackend(BaseFilterBackend):
Filter that works with datatables params.
"""
def filter_queryset(self, request, queryset, view):
if request.query_params.get('format') != 'datatables':
if request.accepted_renderer.format != 'datatables':
return queryset

total_count = queryset.count()
Expand Down
4 changes: 2 additions & 2 deletions rest_framework_datatables/pagination.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ def get_count_and_total_count(self, queryset, view):

class DatatablesPageNumberPagination(DatatablesMixin, PageNumberPagination):
def paginate_queryset(self, queryset, request, view=None):
if request.query_params.get('format') != 'datatables':
if request.accepted_renderer.format != 'datatables':
self.is_datatable_request = False
return super(
DatatablesPageNumberPagination, self
Expand Down Expand Up @@ -70,7 +70,7 @@ def paginate_queryset(self, queryset, request, view=None):

class DatatablesLimitOffsetPagination(DatatablesMixin, LimitOffsetPagination):
def paginate_queryset(self, queryset, request, view=None):
if request.query_params.get('format') == 'datatables':
if request.accepted_renderer.format == 'datatables':
self.is_datatable_request = True
if request.query_params.get('length') is None:
return None
Expand Down
25 changes: 24 additions & 1 deletion tests/test_api.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from django.test import TestCase, override_settings
from django.test import TestCase, override_settings, modify_settings
from django.conf import settings
from rest_framework.test import APIClient
from rest_framework.settings import api_settings

Expand All @@ -22,6 +23,22 @@ def test_no_datatables(self):
result = response.json()
self.assertEquals(result['count'], expected)

def test_datatables_query(self):
response = self.client.get('/api/albums/?format=datatables')
expected = 15
result = response.json()
self.assertEquals('count' in result, False)
self.assertEquals('recordsTotal' in result, True)
self.assertEquals(result['recordsTotal'], expected)

def test_datatables_suffix(self):
response = self.client.get('/api/albums.datatables/')
expected = 15
result = response.json()
self.assertEquals('count' in result, False)
self.assertEquals('recordsTotal' in result, True)
self.assertEquals(result['recordsTotal'], expected)

def test_pagenumber_pagination(self):
response = self.client.get('/api/albums/?format=datatables&length=10&start=10&columns[0][data]=name&columns[1][data]=artist_name&draw=1')
expected = (15, 15, 'Elvis Presley')
Expand Down Expand Up @@ -154,6 +171,12 @@ def test_filtering_column(self):
result = response.json()
self.assertEquals((result['recordsFiltered'], result['recordsTotal'], result['data'][0]['artist_name']), expected)

def test_filtering_column_suffix(self):
response = self.client.get('/api/albums.datatables?length=10&columns[0][data]=artist_name&columns[0][name]=artist__name&columns[0][searchable]=true&columns[0][search][value]=Beatles')
expected = (5, 15, 'The Beatles')
result = response.json()
self.assertEquals((result['recordsFiltered'], result['recordsTotal'], result['data'][0]['artist_name']), expected)

def test_filtering_column_regex(self):
response = self.client.get('/api/albums/?format=datatables&length=10&columns[0][data]=artist_name&columns[0][name]=artist__name&columns[0][searchable]=true&columns[0][search][regex]=true&columns[0][search][value]=^bob')
expected = (2, 15, 'Bob Dylan')
Expand Down
16 changes: 16 additions & 0 deletions tests/test_renderers.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,22 @@ def test_render_no_pagination1(self):
}
self.assertEquals(json.loads(content.decode('utf-8')), expected)

def test_render_no_pagination1_1(self):
obj = [{'foo': 'bar'}]
renderer = DatatablesRenderer()
view = APIView()
request = view.initialize_request(
self.factory.get('/api/foo.datatables?draw=1')
)
content = renderer.render(obj, 'application/json', {'request': request, 'view': view})
expected = {
'recordsTotal': 1,
'recordsFiltered': 1,
'data': [{'foo': 'bar'}],
'draw': 1
}
self.assertEquals(json.loads(content.decode('utf-8')), expected)

def test_render_no_pagination2(self):
obj = {'results': [{'foo': 'bar'}, {'spam': 'eggs'}]}
renderer = DatatablesRenderer()
Expand Down

0 comments on commit f91b31d

Please sign in to comment.