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