Skip to content

Commit 0b53b18

Browse files
committed
Changed the way includes work
1 parent 02d5397 commit 0b53b18

File tree

6 files changed

+39
-45
lines changed

6 files changed

+39
-45
lines changed

advanced_report_builder/data_merge/utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def get_menu_fields(base_model, report_builder_class,
2020
if codes is not None:
2121
codes.add(full_id)
2222

23-
for include in report_builder_class.includes:
23+
for include_field, include in report_builder_class.includes.items():
2424
app_label, model, report_builder_fields_str = include['model'].split('.')
2525

2626
new_model = apps.get_model(app_label, model)
@@ -35,7 +35,7 @@ def get_menu_fields(base_model, report_builder_class,
3535
report_builder_class=new_report_builder_class,
3636
menus=menu,
3737
codes=codes,
38-
code_prefix=f"{code_prefix}{include['field']}__",
38+
code_prefix=f"{code_prefix}{include_field}__",
3939
previous_base_model=base_model,
4040
table=table)
4141
if menus is not None:

advanced_report_builder/filter_query.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -176,25 +176,27 @@ def _get_report_builder_class(self, base_model, field_str, report_builder_class,
176176
include_str = field_parts[0]
177177
new_field_str = '__'.join(field_parts[1:])
178178

179-
for include in report_builder_class.includes:
179+
include = report_builder_class.includes.get(include_str)
180+
181+
if include is not None:
180182
app_label, model, report_builder_fields_str = include['model'].split('.')
181183
new_model = apps.get_model(app_label, model)
182184
new_report_builder_fields = getattr(new_model, report_builder_fields_str, None)
183185

184-
if new_model != previous_base_model and include_str == include['field']:
186+
if new_model != previous_base_model:
185187
result = self._get_report_builder_class(base_model=new_model,
186188
field_str=new_field_str,
187189
report_builder_class=new_report_builder_fields,
188190
previous_base_model=base_model)
189191
if result:
190192
return result
191193
else:
192-
for include in report_builder_class.includes:
194+
include = report_builder_class.includes.get(field_str)
195+
if include is not None:
193196
app_label, model, report_builder_fields_str = include['model'].split('.')
194197
new_model = apps.get_model(app_label, model)
195198
new_report_builder_fields = getattr(new_model, report_builder_fields_str, None)
196-
if field_str == include['field']:
197-
return new_report_builder_fields
199+
return new_report_builder_fields
198200
return None
199201

200202
def _get_pivot_details(self, base_model, pivot_str, report_builder_class, previous_base_model=None, include_str=''):
@@ -213,12 +215,14 @@ def _get_pivot_details(self, base_model, pivot_str, report_builder_class, previo
213215
pivot_parts = pivot_str.split('__')
214216
include_str = pivot_parts[0]
215217
new_pivot_str = '__'.join(pivot_parts[1:])
216-
for include in report_builder_class.includes:
218+
219+
include = report_builder_class.includes.get(include_str)
220+
if include is not None:
217221
app_label, model, report_builder_fields_str = include['model'].split('.')
218222
new_model = apps.get_model(app_label, model)
219223
new_report_builder_fields = getattr(new_model, report_builder_fields_str, None)
220224

221-
if new_model != previous_base_model and include_str == include['field']:
225+
if new_model != previous_base_model:
222226
result = self._get_pivot_details(base_model=new_model,
223227
pivot_str=new_pivot_str,
224228
report_builder_class=new_report_builder_fields,

advanced_report_builder/report_builder.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class ReportBuilderFields:
1010
exclude_display_fields = set()
1111
order_by_fields = set()
1212
url = None
13-
includes = []
13+
includes = {}
1414
default_columns = []
1515

1616
field_classes = {'record_count': RecordCountColumn()}

advanced_report_builder/views/charts_base.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -337,15 +337,15 @@ def get_report_type_details(self):
337337

338338
def _get_query_builder_foreign_key_fields(self, base_model, report_builder_fields, fields,
339339
prefix='', title_prefix='', previous_base_model=None):
340-
for include in report_builder_fields.includes:
340+
for include_field, include in report_builder_fields.includes.items():
341341
app_label, model, report_builder_fields_str = include['model'].split('.')
342342
new_model = apps.get_model(app_label, model)
343343
if new_model != previous_base_model:
344344
new_report_builder_fields = getattr(new_model, report_builder_fields_str, None)
345-
fields.append((prefix + include['field'], title_prefix + include['title']))
345+
fields.append((prefix + include_field, title_prefix + include['title']))
346346
self._get_query_builder_foreign_key_fields(base_model=new_model,
347347
report_builder_fields=new_report_builder_fields,
348348
fields=fields,
349-
prefix=f"{prefix}{include['field']}__",
349+
prefix=f"{prefix}{include_field}__",
350350
title_prefix=f"{title_prefix}{include['title']} --> ",
351351
previous_base_model=base_model)

advanced_report_builder/views/modals_base.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,13 @@ def _get_query_builder_fields(self, base_model, query_builder_filters, report_bu
6565
title=title_prefix + column.title,
6666
column=column,
6767
prefix=prefix)
68-
for include in report_builder_class.includes:
68+
for include_field, include in report_builder_class.includes.items():
6969
app_label, model, report_builder_fields_str = include['model'].split('.')
7070
new_model = apps.get_model(app_label, model)
7171
new_report_builder_fields = getattr(new_model, report_builder_fields_str, None)
7272

7373
if new_model != previous_base_model:
74-
_foreign_key = getattr(base_model, include['field'], None)
74+
_foreign_key = getattr(base_model, include_field, None)
7575

7676
if hasattr(_foreign_key, 'field'):
7777
add_null_field = _foreign_key.field.null
@@ -80,17 +80,17 @@ def _get_query_builder_fields(self, base_model, query_builder_filters, report_bu
8080

8181
if add_null_field:
8282
field_types.get_foreign_key_null_field(query_builder_filters=query_builder_filters,
83-
field=prefix + include['field'],
83+
field=prefix + include_field,
8484
title=title_prefix + include['title'])
8585
if isinstance(new_model(), AbstractUser):
8686
field_types.get_abstract_user_field(query_builder_filters=query_builder_filters,
87-
field=prefix + include['field'],
87+
field=prefix + include_field,
8888
title=title_prefix + include['title'])
8989

9090
self._get_query_builder_fields(base_model=new_model,
9191
query_builder_filters=query_builder_filters,
9292
report_builder_class=new_report_builder_fields,
93-
prefix=f"{prefix}{include['field']}__",
93+
prefix=f"{prefix}{include_field}__",
9494
title_prefix=f"{include['title']} --> ",
9595
previous_base_model=base_model)
9696

@@ -201,7 +201,7 @@ def _get_fields(self, base_model, fields, report_builder_class, tables=None,
201201
'label': title_prefix + pivot_field['title'],
202202
'colour': colour})
203203

204-
for include in report_builder_class.includes:
204+
for include_field, include in report_builder_class.includes.items():
205205
app_label, model, report_builder_fields_str = include['model'].split('.')
206206

207207
new_model = apps.get_model(app_label, model)
@@ -211,7 +211,7 @@ def _get_fields(self, base_model, fields, report_builder_class, tables=None,
211211
fields=fields,
212212
report_builder_class=new_report_builder_class,
213213
tables=tables,
214-
prefix=f"{prefix}{include['field']}__",
214+
prefix=f"{prefix}{include_field}__",
215215
title_prefix=f"{title_prefix}{include['title']} -> ",
216216
title=include.get('title'),
217217
colour=include.get('colour'),

django_examples/report_builder_examples/models.py

Lines changed: 15 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -171,14 +171,11 @@ class ReportBuilder(ReportBuilderFields):
171171
default_multiple_column_text = '{name}'
172172
default_multiple_column_fields = ['name']
173173

174-
includes = [{'field': 'companyinformation',
175-
'title': 'Company Information',
176-
'model': 'report_builder_examples.CompanyInformation.ReportBuilder',
177-
'reversed': True},
178-
{'field': 'user_profile',
179-
'title': 'User',
180-
'model': 'report_builder_examples.UserProfile.ReportBuilder'}
181-
]
174+
includes = {'companyinformation': {'title': 'Company Information',
175+
'model': 'report_builder_examples.CompanyInformation.ReportBuilder',
176+
'reversed': True},
177+
'user_profile': {'title': 'User',
178+
'model': 'report_builder_examples.UserProfile.ReportBuilder'}}
182179

183180
pivot_fields = {'tags': {'title': 'Tags',
184181
'type': 'tag',
@@ -211,9 +208,8 @@ class ReportBuilder(ReportBuilderFields):
211208
'incorporated_date']
212209

213210
default_columns = ['.id']
214-
includes = [{'field': 'company',
215-
'title': 'Company',
216-
'model': 'report_builder_examples.Company.ReportBuilder'}]
211+
includes = {'company': {'title': 'Company',
212+
'model': 'report_builder_examples.Company.ReportBuilder'}}
217213

218214

219215
class Person(models.Model):
@@ -233,9 +229,8 @@ class ReportBuilder(ReportBuilderFields):
233229
'first_name',
234230
'surname',
235231
'date_entered']
236-
includes = [{'field': 'company',
237-
'title': 'Company',
238-
'model': 'report_builder_examples.Company.ReportBuilder'}]
232+
includes = {'company': {'title': 'Company',
233+
'model': 'report_builder_examples.Company.ReportBuilder'}}
239234

240235

241236
class Tags(models.Model):
@@ -278,10 +273,8 @@ class ReportBuilder(ReportBuilderFields):
278273
'push_bikes',
279274
'tractors']
280275

281-
includes = [{'field': 'user_profile',
282-
'title': 'User',
283-
'model': 'report_builder_examples.UserProfile.ReportBuilder'},
284-
]
276+
includes = {'user_profile': {'title': 'User',
277+
'model': 'report_builder_examples.UserProfile.ReportBuilder'}}
285278

286279

287280
class Payment(TimeStampedModel):
@@ -307,13 +300,10 @@ class ReportBuilder(ReportBuilderFields):
307300
'created_field',
308301
CustomDateColumn(column_name='modified', field='modified', title='Modified'),
309302
]
310-
includes = [{'field': 'company',
311-
'title': 'Company',
312-
'model': 'report_builder_examples.Company.ReportBuilder'},
313-
{'field': 'user_profile',
314-
'title': 'User',
315-
'model': 'report_builder_examples.UserProfile.ReportBuilder'},
316-
]
303+
includes = {'company': {'title': 'Company',
304+
'model': 'report_builder_examples.Company.ReportBuilder'},
305+
'user_profile': {'title': 'User',
306+
'model': 'report_builder_examples.UserProfile.ReportBuilder'}}
317307

318308

319309
class ReportPermission(TimeStampedModel):

0 commit comments

Comments
 (0)