Skip to content

Commit 9f8c21e

Browse files
committed
add heading filtering by relation
1 parent 68e016e commit 9f8c21e

File tree

1 file changed

+20
-7
lines changed

1 file changed

+20
-7
lines changed

django_dyn_dt/views.py

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
from django.core.exceptions import ValidationError
55
from django.db.models import Q
6+
from django.db.models.fields.related import RelatedField
67
from django.http import HttpResponse
78
from django.shortcuts import render
89

@@ -22,18 +23,17 @@
2223
DYNAMIC_DATATB = {}
2324

2425
try:
25-
DYNAMIC_DATATB = getattr(settings, 'DYNAMIC_DATATB')
26-
except:
27-
pass
26+
DYNAMIC_DATATB = getattr(settings, 'DYNAMIC_DATATB')
27+
except:
28+
pass
2829

2930
# TODO: 404 for wrong page number
3031
def data_table_view(request, **kwargs):
3132
try:
3233
model_class = Utils.get_class(DYNAMIC_DATATB, kwargs.get('model_name'))
3334
except KeyError:
3435
return render(request, '404.html', status=404)
35-
headings = [field.name for field in model_class._meta.get_fields()]
36-
36+
headings = _get_headings(model_class)
3737
page_number = int(request.GET.get('page', 1))
3838
search_key = request.GET.get('search', '')
3939
entries = int(request.GET.get('entries', 10))
@@ -149,8 +149,7 @@ def export(request, **kwargs):
149149
export_type = request_body.get('type', 'csv')
150150
filter_options = Q()
151151

152-
headings = filter(lambda field: field.name not in hidden,
153-
[field for field in model_class._meta.get_fields()])
152+
headings = filter(lambda field: field.name not in hidden, _get_headings(model_class))
154153
headings = list(headings)
155154
for field in headings:
156155
field_name = field.name
@@ -230,3 +229,17 @@ def get_random_string(length):
230229
# choose from all lowercase letter
231230
letters = string.ascii_lowercase
232231
return ''.join(random.choice(letters) for i in range(length))
232+
233+
234+
def _get_headings(model_class, filter_relations=True):
235+
headings = []
236+
for field in model_class._meta.get_fields():
237+
is_many_to_many_field = field.__dict__.get('many_to_many', False)
238+
is_many_to_one_field = field.__dict__.get('many_to_one', False)
239+
is_one_to_many_field = field.__dict__.get('one_to_many', False)
240+
is_one_to_one_field = field.__dict__.get('one_to_one', False)
241+
if filter_relations and (
242+
is_many_to_many_field or is_many_to_one_field or is_one_to_many_field or is_one_to_one_field):
243+
continue
244+
headings.append(field.name)
245+
return headings

0 commit comments

Comments
 (0)