|
3 | 3 |
|
4 | 4 | from django.core.exceptions import ValidationError |
5 | 5 | from django.db.models import Q |
| 6 | +from django.db.models.fields.related import RelatedField |
6 | 7 | from django.http import HttpResponse |
7 | 8 | from django.shortcuts import render |
8 | 9 |
|
|
22 | 23 | DYNAMIC_DATATB = {} |
23 | 24 |
|
24 | 25 | try: |
25 | | - DYNAMIC_DATATB = getattr(settings, 'DYNAMIC_DATATB') |
26 | | -except: |
27 | | - pass |
| 26 | + DYNAMIC_DATATB = getattr(settings, 'DYNAMIC_DATATB') |
| 27 | +except: |
| 28 | + pass |
28 | 29 |
|
29 | 30 | # TODO: 404 for wrong page number |
30 | 31 | def data_table_view(request, **kwargs): |
31 | 32 | try: |
32 | 33 | model_class = Utils.get_class(DYNAMIC_DATATB, kwargs.get('model_name')) |
33 | 34 | except KeyError: |
34 | 35 | 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) |
37 | 37 | page_number = int(request.GET.get('page', 1)) |
38 | 38 | search_key = request.GET.get('search', '') |
39 | 39 | entries = int(request.GET.get('entries', 10)) |
@@ -149,8 +149,7 @@ def export(request, **kwargs): |
149 | 149 | export_type = request_body.get('type', 'csv') |
150 | 150 | filter_options = Q() |
151 | 151 |
|
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)) |
154 | 153 | headings = list(headings) |
155 | 154 | for field in headings: |
156 | 155 | field_name = field.name |
@@ -230,3 +229,17 @@ def get_random_string(length): |
230 | 229 | # choose from all lowercase letter |
231 | 230 | letters = string.ascii_lowercase |
232 | 231 | 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