diff --git a/django_dyn_dt/templates/index.html b/django_dyn_dt/templates/index.html index 5590f2f..baf25e2 100644 --- a/django_dyn_dt/templates/index.html +++ b/django_dyn_dt/templates/index.html @@ -7,7 +7,7 @@ - + diff --git a/django_dyn_dt/templates/static/src/controller/index.js b/django_dyn_dt/templates/static/src/controller/index.js index f49817f..e1cf867 100644 --- a/django_dyn_dt/templates/static/src/controller/index.js +++ b/django_dyn_dt/templates/static/src/controller/index.js @@ -212,7 +212,7 @@ export const exportData = (dataTable, type) => { const searchParam = new URLSearchParams(window.location.search).get('search') || '' - const hiddenColumns = myData.headings.filter((d,i) => !dataTable.columns().visible(i)) + const hiddenColumns = myData.headings.filter((d,i) => !dataTable.columns.visible(i)) fetch (`/datatb/${modelName}/export/`, {method: 'POST',body: JSON.stringify({ diff --git a/django_dyn_dt/views.py b/django_dyn_dt/views.py index 8f1e63e..9212d8f 100644 --- a/django_dyn_dt/views.py +++ b/django_dyn_dt/views.py @@ -3,6 +3,7 @@ from django.core.exceptions import ValidationError from django.db.models import Q +from django.db.models.fields.related import RelatedField from django.http import HttpResponse from django.shortcuts import render @@ -22,9 +23,9 @@ DYNAMIC_DATATB = {} try: - DYNAMIC_DATATB = getattr(settings, 'DYNAMIC_DATATB') -except: - pass + DYNAMIC_DATATB = getattr(settings, 'DYNAMIC_DATATB') +except: + pass # TODO: 404 for wrong page number def data_table_view(request, **kwargs): @@ -32,8 +33,7 @@ def data_table_view(request, **kwargs): model_class = Utils.get_class(DYNAMIC_DATATB, kwargs.get('model_name')) except KeyError: return render(request, '404.html', status=404) - headings = [field.name for field in model_class._meta.get_fields()] - + headings = _get_headings(model_class) page_number = int(request.GET.get('page', 1)) search_key = request.GET.get('search', '') entries = int(request.GET.get('entries', 10)) @@ -149,8 +149,7 @@ def export(request, **kwargs): export_type = request_body.get('type', 'csv') filter_options = Q() - headings = filter(lambda field: field.name not in hidden, - [field for field in model_class._meta.get_fields()]) + headings = filter(lambda field: field.name not in hidden, _get_headings(model_class)) headings = list(headings) for field in headings: field_name = field.name @@ -230,3 +229,19 @@ def get_random_string(length): # choose from all lowercase letter letters = string.ascii_lowercase return ''.join(random.choice(letters) for i in range(length)) + + +def _get_headings(model_class, filter_relations=True): + headings = [] + for field in model_class._meta.get_fields(): + if filter_relations and _is_relation_field(field): + continue + headings.append(field.name) + return headings + +def _is_relation_field(field): + is_many_to_many_field = field.many_to_many is not None + is_many_to_one_field = field.many_to_one is not None + is_one_to_many_field = field.one_to_many is not None + is_one_to_one_field = field.one_to_one is not None + return is_many_to_many_field or is_many_to_one_field or is_one_to_many_field or is_one_to_one_field \ No newline at end of file