report-builder on multiple sites and\or custom model managers?
Created by: joebeone
Great library! I would like to use it on a project that has multiple sites and therefore uses django.contrib.sites.managers.CurrentSiteManager. I noted django-report-builder get_query method on the Report model uses the default django manager (i.e objects.all())
It would be nice to be able to customize the model manager used by report-builder in django settings. This would allow for filter by site or some other customized model needs. Similar to how your REPORT_BUILDER_INCLUDES and REPORT_BUILDER_EXCLUDES works:
settings.py
REPORT_BUILDER_MODEL_MANAGER = 'on_site'
model.py
def _get_model_manager(self):
"""
Get default manager from settings else use objects
"""
model_manager = 'objects' #sets the default to objects
if getattr(settings, 'REPORT_BUILDER_MODEL_MANAGER', False):
model_manager = settings.REPORT_BUILDER_MODEL_MANAGER
return model_manager
In get_query method:
def get_query(self):
report = self
model_class = report.root_model.model_class()
message= ""
manager = report._get_model_manager()
objects = getattr(model_class, manager).all() #changed from objects.all()
.........
app.model.py
from django.contrib.sites.managers import CurrentSiteManager
class MyModel(models.Model): on_site = CurrentSiteManager()
Perhaps there is another way to do this I have over looked. I could filter each report by a site attribute but that feels redundant and I know it this case I want all reports to be filtered by site. What do you think?