Skip to main content

A Django Admin add-on which adds functionality to export data in customized forms of output.

Project description

django-reports-admin

A Django Admin add-on which adds functionality to export data in customized forms of output.

Requirements

Django Reports Admin requires Django 1.10 or later, and is written for Python 3.5 or later.

Installation

NOTE: Although enabled by default, you’ll want to ensure that django.contrib.contenttypes is within INSTALLED_APPS.

pip install django-reports-admin

Then, amend your Django settings.INSTALLED_APPS:

INSTALLED_APPS = (
    ...
    'reports',
    ...
)

Usage

Creating reports requires subclassing the ModelReport class and identifying a report. This can be done with a few lines of code if you simply want to extract the admin list view for verbatim. For example:

# This file can be named anything, but it lives well within the admin.py or
# models.py as it'll ensure your register() command is run.
# yourapp/reports.py -- This file can be named anything

from reports.base import ModelReport

class MyReport(ModelReport)
    name = "Report - My Report"

Then, register the ModelReport against a model:

# yourapp/admin.py

from .reports import MyReport
from .models import MyModel

reports.register(MyModel, MyReport)

Upon registration, you’ll see a new action with the Django Admin for that Model, with whatever name you’ve provided in the name attribute.

For advanced report modification, subclass the following functions within your ModelReport class:

get_field_lookups returns a list of column name-value/callback tuples. This function is a great way to modify the columns of the report, and the exact output of each field. It is useful if you wish to create a calculated field, or format a date field.

get_row_data returns a dictionary of the data to be entered for each row. Generally you should not need to modify this as get_field_lookups will be sufficient.

generate_output can be modified to adjust the type of output. By default, a CSV file is generated.

Usage In Shell And Tests

It may be useful for you to test a report via code, either as a test or a quick shell script. This is done without much stress:

# Assuming a defined ModelReport
from reports.base import ModelReport
from .models import MyModel

class MyReport(ModelReport):
    queryset = MyModel.objects.all()

# Instantiate the report, and run it through various means

report = MyReport()

# Create a SavedReport instance
report.run_report()

# Raw output of the report (as CSV, by default)
report.generate_output()

# Output list of OrderedDicts
report.collect_data()

Testing

Tests are run using pytest, and the test suite can be executed using the MakeFile

make test

Changelog

1.1.0 (2021-02-06)

  • 58bece6 - Migration for change to SavedReport.run_by

  • fae699c - Full code base format + commit of change to SavedReport.run_by. Modified to add the on_delete=models.SET_NULL

1.0.4 (2017-02-28)

  • a0dc5a0 - Return None on error when calling ModelReport

1.0.3 (2017-02-27)

  • 21ca6a5 - Refactor calling to report runner

  • fba6bf1 - Allow queryset to be passed within __init__ method

  • 5f0ef05 - Add simple test case for ModelReport, refine misc.

  • 3d7d587 - Document shell usage in README, add more type hints

  • 5268739 - Adjust signature of run_report, easing usage in shell

1.0.2 (2017-02-10)

  • fa46174 Adjust user messaging in admin.

  • Update README

1.0.1 (2017-02-10)

  • First pypi release

1.0.0 (2017-02-09)

  • Initial commit

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-reports-admin-1.1.0.tar.gz (13.8 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page